初识函数
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关键字
这个题弄懂,,作用域就差不多了。