函数
一,定义
对代码块和功能的封装。
形式为:def 函数名():
函数体
return(会返回结果,可有可无)
注意,return后面的函数会不再执行。
关于返回值:
如果return什么都不写 或者 ⼲脆不写return .那么返回的就是None
如果return后⾯写了⼀个值. 则调⽤者可以接收⼀个结果
如果return后⾯写了多个结果, 则调⽤者可以接收⼀个tuple, 调⽤者可以直接解构成
多个变量
二,参数
参数大致分为位置参数>*args(输出为元组)>默认值参数>**kwargs(输出为字典)(这是分布顺序不可打乱)。
- 形参,在函数声明的位置。(变量)1,位置参数;2,默认值参数;3,动态参数
- 实参,在函数调用的时候给函数的形参传递的信息。(具体的值)1,位置参数,记住名字;2,关键字参数,记住名字;3,混合参数,先位置后关键。
- 传参,把实参的值交给形参的过程
- 动参,分为*args(位置参数的动态参数)与**kwargs(关键字参数的动态参数)。
位置参数,关键字参数,
- 位置参数,按照位置来进行赋值。
1 def yue(chat, address, age): 2 print("拿出⼿机") 3 print("打开"+chat) 4 print("找个"+address+"附近漂亮的"+str(age)+"岁妹⼦") 5 print("约不约")
- 默认值参数
1 def stu_info(name, age, sex='男'): 2 print("录⼊学⽣信息") 3 print(name, age, sex) 4 print("录⼊完毕") 5 stu_info("张强强", 18)
某些参数可以使用默认值。
- 打散
输入列表时,可以将打散成一个一个的进行输入。此方法对于列表,元组,字符串都可以使用。
1 def fun(*args): 2 print(args) 3 lst = [1, 4, 7] 4 fun(lst[0], lst[1], lst[2]) 5 fun(*lst) # 可以使⽤*把⼀个列表按顺序打散 6 s = "⾂妾做不到" 7 fun(*s) # 字符串也可以打散, (可迭代对象)
对于字典的打算需要另外方法。
1 def fun(**kwargs): 2 print(kwargs) 3 dic = {'a':1, 'b':2} 4 fun(**dic)
4.函数的注释(又称为文件注释)
方法是多行注释内进行回车。
1 def chi(food, drink): 2 """ 3 这⾥是函数的注释, 先写⼀下当前这个函数是⼲什么的, ⽐如我这个函数就是⼀个吃 4 :param :param food: 参数food是什么意思 5 :param :param drink: 参数drink是什么意思 6 :return :return: 返回的是什么东东 7 """ 8 print(food, drink) 9 return "very good"
三,函数名
函数名与前面学习的变量是差不多的。比如,不能以数字开头等。
应用:
- 内存地址
1 def func(): 2 print("呵呵") 3 print(func) 4 结果: 5 <function func at 0x1101e4ea0>
- 函数名可以赋值给其他变量
1 def func(): 2 print("呵呵") 3 print(func) 4 a = func # 把函数当成⼀个变量赋值给另⼀个变量 5 a() # 函数调⽤ func()
- 函数名可以作为容器
1 print("呵呵") 2 def func2(): 3 print("呵呵") 4 def func3(): 5 print("呵呵") 6 def func4(): 7 print("呵呵") 8 lst = [func1, func2, func3] 9 for i in lst: 10 i()
- 函数名可以作为函数的参数
1 def func(): 2 print("吃了么") 3 def func2(fn): 4 print("我是func2") 5 fn() # 执⾏传递过来的fn 6 print("我是func2") 7 func2(func) # 把
函数func当成参数传递给func2的参数fn. - 函数名可以作为函数的返回值
1 def func_1(): 2 print("这⾥是函数1") 3 def func_2(): 4 print("这⾥是函数2") 5 print("这⾥是函数1") 6 return func_2 7 fn = func_1() # 执⾏函数1. 函数1返回的是函数2, 这时fn指向的就是上⾯函数2 8 fn() # 执⾏上⾯返回的函数
四,闭包
闭包就是内层函数对外层函数(此外层函数非全局)的变量引用。
1 def func1(): 2 name = "alex" 3 def func2(): 4 print(name) # 闭包 5 func2() 6 func1() 7 结果: 8 alex
可以使用__closure__来检测函数是不是闭包。返回None就不是闭包。
1 def func1(): 2 name = "alex" 3 def func2(): 4 print(name) # 闭包 5 func2() 6 print(func2.__closure__) # (<cell at 0x10c2e20a8: str object at 7 0x10c3fc650>,) 8 func1()
闭包的好处,一,可以保护变量名不会被覆盖。二,可以保证变量常驻于内存,可以大大增加函数的运行速度。
posted on 2023-11-20 23:16 我才是最帅的那个男人 阅读(46) 评论(0) 收藏 举报
浙公网安备 33010602011771号