【Python】6.python函数与⾯向对象,⽂件读写与第三⽅库⼀、Python函数
定义:函数是对功能代码的⼀种封装,可以反复调⽤,python中的函数⽤"def"定义。
1、函数返回值
如果没有设置返回值,会默认返回⼀个NoneType类型的返回值。
def printhello1(num,strcontent):
for i in range(num):
print(strcontent)
# return 'Done!'
a=printhello1(5,'python!')
print(type(a))
# 有返回值与⽆返回值 None
执⾏结果如下:
2、函数执⾏
函数的执⾏要加“()”,如果不加“()”那只是函数的出处,并不是在执⾏函数
def printhello1(num,strcontent):
for i in range(num):
print(strcontent)
# return 'Done!'
printhello1(2,'python!')
printhello
执⾏结果如下:
3、函数参数的传递
如下函数⽰例,python函数的形参与实参是⼀⼀对应的,如果不对应就会报错,这是Python函数的定位性,那么如何实现传递n多个参数的情况呢,这就要⽤到参数的打包了,把参数打包成为⼀个变量,关键是参数前⾯的“*”,可以添加任意多个参数。
# 参数,两个参数
def myadd0(a,b):
return a+b
myadd0(1,2)
print(myadd0(1,2))
# 三个参数
def myadd1(a,b,c):
return a+b+c
myadd1(1,2,3)
print(myadd1(1,2,3))
# 四个参数
def myadd2(a,b,c,d):
return a+b+c+d
myadd2(1,2,3,4)
print(myadd2(1,2,3,4))
# n个参数(位置参数不定长)
def myadd(*num):
print(type(num))
print(num)
return sum(num)
myadd(1,2,4,6,7,8,9,10)
执⾏结果如下:
4、位置参数不定长
位置参数也就是给参数定位,形式参数对应实际参数,位置也是⼀⼀对应的,如下函数mydd2,第⼀个参数是arg,其他的参数都打包到变量args⾥⾯,args是⼀个元组类型的数据。
def myadd2(arg,*args):
print(type(args))
print(arg)
print(args)
return sum(args)
myadd2(6,3,5,3)
执⾏结果如下:
5、关键字参数
关键字参数和函数调⽤关系紧密,函数调⽤使⽤关键字参数来确定传⼊的参数值,使⽤关键字参数允许函数调⽤时参数的顺序与声明时不⼀致,因为Python解释器能够⽤参数名匹配参数值。
# 关键字参数
def myadd0(args,lastnum=1000):
print(args+lastnum)
return args+lastnum
myadd0(5)
# 关键字参数不定长
def myaddkw(**names):
print(type(names))
print(list(names.keys()))
print(list(names.values()))
return list(names.values())
myaddkw(name='david',gender='male',age=0)
执⾏结果如下:
6、偏函数
偏函数就是设置了⼀部分参数的函数,适⽤于需要传递很多参数,部分参数固定,需要传递个别参数的情况。如下代码,⾸先要先导⼊functools,"base=16"固定,传递参数a,⽤functools.partial()重新定义⼀个函数hex2int,输出类型是functools.partial证明是偏函数,partical起到固定参数的作⽤。
# 偏函数
# 设置了⼀部分参数的函数
import functools
a=0x24
print(int(str(a),base=16))
hex2int=functools.partial(int,base=16)
print(type(hex2int)) # 类型为functools.partial证明是偏函数
hex2int(str(a))
执⾏结果如下:
7、⾼阶函数
⾼阶函数就是能够接收函数作为参数的这个函数就叫⾼阶函数,这⾥介绍三个⾼阶函数map,reduce,filter
map函数有两个参数:map(func, *iterables) --> map object,⼀个是函数,⼀个是可迭代的列表,返回值是⼀个map object,执⾏的时候列表数据⼀个⼀个弹出来执⾏匿名函数操作。
# map
# ⽤map实现⼀个list所有元素都减⼀的功能
# 不需要⽤for循环,列表推导,直接⽤map函数
l1=[1,2,3,4,5,6,7]
print(list(map(lambda x:x-1,l1)))
help(map)
执⾏结果如下:
reduce函数有两个参数:reduce(function, sequence[, initial]) -> value,⼀个是函数,⼀个是可迭代的列表,根据函数的定义做迭代操作,最后返回⼀个结果值,执⾏的时候,列表是两个两个的执⾏匿名函数操作。
# reduce
# 在python2⾥⾯可以直接⽤reduce
# 在python3⾥⾯被删除掉了,要先导⼊functools
# 实现迭代相加的功能
from functools import reduce
l1=[1,2,3,4,5,6,7]python怎么读的
reduce(lambda a,b:a+b,l1)
print(reduce(lambda a,b:a+b,l1))
help(reduce)
执⾏结果如下:
filter函数跟map函数很像,其实是做了⼀个过滤,会将每⼀个值根据我们定义的函数进⾏过滤,filter函数有两个参数:filter(function or None, iterable) --> filter object,⼀个函数和⼀个可迭代对象,返回⼀个filter对象。
执⾏结果如下:
8、匿名函数
匿名函数顾名思义其实就是不需要⽤“def”定义的函数,直接⽤lambda定义的函数,后⾯直接跟参数和
函数体,⽽且函数体不⽤写return,就会直接把执⾏结果返回,在⾼阶函数中会⽤到lambda函数。
# 匿名函数
type (lambda a,b:a-b)
# 定义,lambda
# 函数体不⽤写return
执⾏结果如下:
⼆、Python⾯向对象
⾯向对象就是从⼀类的事物中抽取出来的共性,我们把它叫做类,然后再去创建属于这个类的⼀个实体的时候,我们就给它叫做实例化对象,Python中⼀切皆对象,类实际上就是封装了数据与⽅法,类与⽅法的区别就在于,类既封装了数据⼜封装了⽅法,⽽⽅法只是封装了⽅法。
1、Python中⼀切皆对象
# type() # 返回对象类型
def a():
pass
def b():
pass
print(type(a))
# 每个对象的id⾝份证号,每个对象是不⼀样的
print(id(a))
print(id(b))
# dir()
执⾏结果如下:
2、类的创建与对象的初始化
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论