Python学习笔记——Python 函数
程序员文章站
2022-08-20 14:29:57
1. 函数定义与调用 2. 函数文档 3. 关键字参数 4. 默认参数 5. 收集参数 6. 返回值 7. 作用域 8. global 9. 内嵌函数 10. 闭包 ......
1. 函数定义与调用
def myfirstfunction(): print('这是我创建的第一个函数') #调用 myfirstfunction()
这是我创建的第一个函数
2. 函数文档
def mysecondfunction(name): #下面这个字符串即为函数文档 '函数定义过程中的name叫形参' print('你的名字是' + name) mysecondfunction('nigream') #两个双下划线表示系统属性 print(mysecondfunction.__doc__) #也可以用 help(mysecondfunction)
你的名字是nigream 函数定义过程中的name叫形参 help on function mysecondfunction in module __main__: mysecondfunction(name) 函数定义过程中的name叫形参
3. 关键字参数
def saysome(name , words): print(name + '-->' + words) saysome(name='nigream',words='hello')
nigream-->hello
4. 默认参数
def saysome(name = 'nigream', words = 'hello'): print(name + '-->' + words) saysome() saysome('苍井空') saysome('苍井空' , '我脱光衣服躺在镜头前,是为了生存;而你衣冠楚楚地站在镜头前,却是为了私欲和欺骗!')
nigream-->hello 苍井空-->hello 苍井空-->我脱光衣服躺在镜头前,是为了生存;而你衣冠楚楚地站在镜头前,却是为了私欲和欺骗!
5. 收集参数
def test(*params): print('参数的长度是:',len(params)) print('第三个参数是:',params[2]) test(1,2,3,4,'nigream',5)
参数的长度是: 6 第三个参数是: 3
6. 返回值
def back(): return [1,'nigream',3.14] print(back()) #运行结果 [1, 'nigream', 3.14] def back1(): return 1,'nigream',3.14 #这里被看成一个元组 print(back1())
[1, 'nigream', 3.14] (1, 'nigream', 3.14)
7. 作用域
def discounts(price,rate): final_price = price * rate return final_price old_price = float(input('请输入原价:')) rate = float(input('请输入折扣率:')) new_price = discounts(old_price,rate) print('打折后的价格是:',new_price)
请输入原价:100 请输入折扣率:0.8 打折后的价格是: 80.0
def discounts(price,rate): final_price = price * rate return final_price old_price = float(input('请输入原价:')) rate = float(input('请输入折扣率:')) new_price = discounts(old_price,rate) print('打折后的价格是:',new_price) print('这里试图打印局部变量final_price的值:',final_price)
请输入原价:100 请输入折扣率:0.8 打折后的价格是: 80.0
--------------------------------------------------------------------------- nameerror traceback (most recent call last) <ipython-input-9-bd414db96855> in <module>() 7 new_price = discounts(old_price,rate) 8 print('打折后的价格是:',new_price) ----> 9 print('这里试图打印局部变量final_price的值:',final_price) nameerror: name 'final_price' is not defined
def discounts(price,rate): final_price = price * rate print('这里试图打印全局变量old_price的值:',old_price) return final_price old_price = float(input('请输入原价:')) rate = float(input('请输入折扣率:')) new_price = discounts(old_price,rate) print('打折后的价格是:',new_price)
请输入原价:100 请输入折扣率:0.8 这里试图打印局部变量old_price的值: 100.0 打折后的价格是: 80.0
def discounts(price,rate): final_price = price * rate #在这里python会重新定义一个名字相同的局部变量 old_price = 50 print('这里试图打印局部变量old_price的1值:',old_price) return final_price old_price = float(input('请输入原价:')) rate = float(input('请输入折扣率:')) new_price = discounts(old_price,rate) print('这里试图打印全局变量old_price的2值:',old_price) print('打折后的价格是:',new_price)
请输入原价:100 请输入折扣率:0.8 这里试图打印局部变量old_price的1值: 50 这里试图打印全局变量old_price的2值: 100.0 打折后的价格是: 80.0
8. global
count = 5 def myfun(): count = 10 print(10) myfun() print(count)
10 5
#要在函数内部修改count count = 5 def myfun(): global count count = 10 print(10) myfun() print(count)
10 10
9. 内嵌函数
def fun1(): print('fun1正在被调用') def fun2(): print('fun2正在被调用') fun2() fun1()
fun1正在被调用 fun2正在被调用
10. 闭包
#如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量 #进行引用,那么内部函数就被认为是闭包(closure)。 def funx(x): def funy(y): return x*y return funy i = funx(8) print(type(i)) print(i(5)) print(funx(8)(5))
<class 'function'> 40 40
def fun1(): x = 5 def fun2(): #这里由于外层作用域已经定义了x, #所以此时系统会重新定义局部变量x, #而又未次局部变量赋值,所以该x = x + 2会报错 x *= x return x return fun2() fun1()
--------------------------------------------------------------------------- unboundlocalerror traceback (most recent call last) <ipython-input-32-d753abbbddb3> in <module>() 9 return fun2() 10 ---> 11 fun1() <ipython-input-32-d753abbbddb3> in fun1() 7 x *= x 8 return x ----> 9 return fun2() 10 11 fun1() <ipython-input-32-d753abbbddb3> in fun2() 5 #所以此时系统会重新定义局部变量x, 6 #而又未次局部变量赋值,所以该x = x + 2会报错 ----> 7 x *= x 8 return x 9 return fun2() unboundlocalerror: local variable 'x' referenced before assignment
#python2解决,利用列表等容器 def fun1(): #将其定义为列表 x = [5] def fun2(): x[0] *= x[0] return x[0] return fun2() fun1()
25
#python3解决,利用关键字nonlocal def fun1(): x = 5 def fun2(): nonlocal x x *= x return x return fun2() fun1()
25
上一篇: 小白学习day4------字典
下一篇: 渔夫钓到鱼后还喂它鱼饵吗?