初识函数
1.什么是函数
具有封装功能的代码块。
2.函数的定义,函数名,函数体以及函数的调用。
1.定义函数,使用def
def 函数名():
函数体
2.函数名,跟变量的命名规范基本相同
3.函数体,具体要执行的的功能
4.函数的调用:使用函数名可以调用函数,写法:函数名(),这个函数已经被调用,里面的函数体会被执行
注意:函数只要调用才能执行里面的代码
3.函数的返回
执行完函数之后,我们可以使用return来返回一个结果。
1.不写return,默认返回None
2.只写return,返回None
3.return “jskdf”,返回一个字符串,后面可以是任何可以返回的代码段。
4.return后面返回了多个结果,则调用者可以接受一个tuple,直接解构成多个变量
4.函数的参数
在调用函数时,可以给函数传递一个或者多个参数。参数可以是数字,字符串,列表,元组,字典等等。
1.形参:写在函数声明的位置的变量叫形参,形式上的一个变量,可以用任何值来表示。
2.实参:函数调用时给函数传递的值,叫实参,是函数真正意义上需要的值。
3.传参:给函数传递消息的时候将实参的值传递给形参,函数内部就可以用这个形参的值了。
4.参数的分类
1.位置参数,大概意思就是按照位置的顺序把实参传递赋值到对应的形参中
2.关键字参数:函数中的参数非常多就可以使用关键字参数了,只需要记住参数的名字,注意:使用关键字参数可以随意更换参数的顺序,不过不建议,对称比较好看。
3.混合参数,把位置参数和关键字参数回合使用,但是要注意的是,关键字参数必须要写在位置参数的后边,否则会报错。
综上所述:从实参的角度来看,分为这三种,形参较为复杂。(位置参数,默认值参数,动态参数)
函数进阶
1.函数参数--动态传参
适用于参数不确定或者参数太多。
1.动态接收位置参数。动态参数必须放到最右边,当然也可以用关键字参数
2.动态接收关键字参数。使用**kwargs
注意:关键字参数必须放在位置参数后边。
最终顺序:位置参数>*args>默认值参数>**kwargs,这四种参数可以任意的进行使用。
3.动态传参的另一种方式,用*把可迭代对象按照顺序打散,用**可以把字典打散。
2.命名空间
在python解释器开始执⾏之后, 就会在内存中开辟⼀个空间, 每当遇到⼀个变量的时候, 就 把变量名和值之间的关系记录下来, 但是当遇到函数定义的时候, 解释器只是把函数名读入内 存, 表示这个函数存在了, ⾄于函数内部的变量和逻辑, 解释器是不关心的. 也就是说⼀开始 的时候函数只是加载进来, 仅此⽽而已, 只有当函数被调⽤和访问的时候, 解释器才会根据函数 内部声明的变量来进⾏开辟变量的内部空间. 随着函数执⾏行完毕, 这些函数内部变量占⽤的空 间也会随着函数执⾏完毕⽽而被清空.
我们给存放名字和值的关系的空间起⼀一个名字叫: 命名空间. 我们的变量量在存储的时候就 是存储在这片空间中的.
命名空间分类:
1. 全局命名空间--> 我们直接在py⽂文件中, 函数外声明的变量都属于全局命名空间
2. 局部命名空间--> 在函数中声明的变量会放在局部命名空间
3. 内置命名空间--> 存放python解释器为我们提供的名字, list, tuple, str, int这些都是内 置命名空间
加载顺序:
1. 内置命名空间
2. 全局命名空间
3. 局部命名空间(函数被执⾏的时候)
取值顺序:
1. 局部命名空间
2. 全局命名空间
3. 内置命名空间
作⽤域: 作⽤用域就是作⽤用范围, 按照⽣生效范围来看分为 全局作⽤用域和局部作⽤用域
全局作用域: 包含内置命名空间和全局命名空间. 在整个⽂件的任何位置都可以使用(遵循 从上到下逐⾏执⾏). 局部作⽤用域: 在函数内部可以使⽤.
作用域命名空间:
1.全局作用域:全局命名空间+内置命名空间
2.局部作用域:局部命名空间
3.函数的嵌套
很简单,一个函数中包含着另一个函数。
4.global,nonlocal关键字
这个题弄懂,,作用域就差不多了。