python之函数
Posted 鵬程萬裏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之函数相关的知识,希望对你有一定的参考价值。
不加区分地将所有功能的代码垒到一起,问题是:
代码可读性差
代码冗余
代码可扩展差
如何解决?
函数即工具,事先准备工具的过程是定义函数,拿来就用指的就是函数调用
结论:函数使用必须是:先定义,后调用
二:函数的分类
1.内置函数:built-in
2.自定义函数:
def 函数名(参数1,参数2,...):
‘‘‘注释‘‘‘
函数体
三:为何要定义函数
函数即变量,变量必须先定义后使用,未定义而直接引用函数,就相当于在引用一个不存在的变量名
四、定义函数的三种形式
无参:应用场景仅仅只是执行一些操作,比如与用户交互,打印
有参:语要根据外部传进来的参数,才能执行相应的逻辑,比如统计长度,求最大值最小值
空函数:设计代码结构
五、形参与实参
形参与实参: def foo(x,y): #形式参数 return x+y foo(1,2) #实际参数 1.位置参数:按照从左到右的顺序依次定义的参数 def foo(x,y): print(x) print(y) #安位置定义的形参,必须被传值,多一个不行 foo(1,2) #安位置定义的实参,与形参一一对应,多一个少一个都不行 2.关键字参数:实参在定义时,按照key=value形式定义 def foo(x,y): print(x) print(y) foo(y=10,x=1)#关键字参数可以不用像位置实参一样与形参一一对应,指名道姓的传值 注意的问题一:位置实参必须在关键字实参的前面 注意的问题二:实参的形式既可以用位置实参又可以用关键字形参,但是一个形参不能重复传值 3.默认参数:在定义函数阶段,就已经为形参赋值,定义阶段有值,调用阶段不用传值 def func(x,y=10): print(x) print(y) func(1) 默认参数(形参)需要注意的问题一:必须放在位置形参后面 默认参数需要注意的问题二:默认参数通常要定义成不可变类型 默认参数需要注意的问题三:默认参数只在定义阶段被赋值一次 形参的应用:值经常变化的需要定义成位置形参,大多数情况下都一样需要定义成默认参数 4.可变长参数:可变长指的是实参的个数不固定 按位置定义的可变长度的实参:* def func(x,y,*args): #x=1,y=2,args=(3,4,5) print(x,y) print(args) # func(1,2,3,4,5) func(1,2,3,4,5) 按关键字定义的可变长度的实参:** def func(x,y,**kwargs): #x=1,y=2,kwargs={‘a‘:1,‘b‘:3,‘z‘=3} print(x,y) print(kwargs) func(1,y=2,z=3,a=1,b=3) def func(*args,**kwargs): #可以接收任何类型参数 print(args) print(kwargs) func(1,y=2,z=3,a=1,b=3) 5.命名关键字参数:定义在*后的形参,这类形参,必须被传值,而且要求实参必须是以关键字的形式来传值 def register(name,age,*,group,**kwargs): print(name) print(age) print(group) print(kwargs) register(name=‘sam‘,age=18,z=10) 顺序:位置,默认,*,命名关键字,** 六、函数对象 函数是第一类对象: 指的是函数可以被当做数据传递 def func(): print(‘from func‘) 可被引用 f=func 可以当做函数的参数 def func(): print(‘from func‘) def foo(x): print(x) x() foo(func) 可以当做函数的返回值 def foo(): print(‘from foo‘) def bar(): return foo f=bar() print(f) print(foo) x=0 def f1(): x=1 def f2(): # x=2 print(x) return f2 f=f1() # print(f) f() 可以当做容器类型的元素 def select(): print(‘select function‘) func_dic={ ‘select‘:select, } # print(func_dic[‘select‘]) func_dic[‘select‘]() 七、函数嵌套 函数的嵌套调用 def max2(x,y): if x > y: return x else: return y def max4(a,b,c,d): res1=max2(a,b) #23 res2=max2(res1,c) #23 res3=max2(res2,d) #31 return res3 print(max4(11,23,-7,31)) #函数的嵌套定义 def f1(): def f2(): def f3(): print(‘from f3‘) print(‘from f2‘) f3() print(‘from f1‘) f2() f1()
八、函数的返回值
返回值:可以返回任意类型
没有return:None
return value: value
return val1,val2,val3 :(val1,val2,val3)
return的效果:只能返回一次值,终止函数的执行
九、闭包函数
1.闭包函数:1 内部函数 2 包含对外部作用域而非全局作用域的引用
2.闭包函数的特点:
1.自带作用域
2.延迟计算
3.定义闭包函数的基本形式
def 外部函数名():
内部函数需要的变量
def 内部函数():
引用外部变量
return 内部函数
4.print(b.__closure__)查看闭包函数
print(b.__closure__[0].cell_contents)查看闭包函数上一级的值
以上是关于python之函数的主要内容,如果未能解决你的问题,请参考以下文章