今天是在老男孩学习的第十天,主要对函数知识做了大致的补充,内容整理如下:
函数的优点:
可读性强,复用性强。
默认参数的陷阱:
如果参数的默认参数是可变数据类型,那么每一次调用函数的时候,如果不传值则会公用资源,也就是说这个可变类型不会初始化
def func(v,k = []): k.append(1) return k v = 1 print(func(v)) v = 2 print(func(v))
如图,k的原本是空列表,但是在第一次调用后,k并没有初始化,所以在第二次的时候又加了1,第二次输出[1,1]
三元运算:
变量 = True时要返回的结果 if 条件 else Falses时的结果 目的:简化代码
def fuck(s,b): c = s if s > b else b return c def fuck(s,b): if s > b: c = s else: c = b return c
这两个代码的作用是一样的 三元运算的要求:必须直接有结果,必须有if 和 else
函数进阶
命名空间和作用域
在这段程序中,input属于内置命名空间,它是由python解释器自带的,在你打开python时就自动加载,不依赖个人。
input1 属于全局命名空间,她由用户自己定义,一般是函数或者变量,当你只有你建立后才可以使用。当关闭后随之消失。
h是在用户自己定义的函数里存在的,只有在这个函数里才可以使用叫局部命名空间。当调用该函数的时候才会创建,函数结束后就消失。要想在外使用必须重新定义。
全局命名空间,内置命名空间,局部命名空间的关系
在局部空间中可以使用全局和内置的命名
在全局中可以使用内置的命名,不能使用局部的命名
内置中全局和内置都不能使用 (python自己编的,不能更改)
当我们在全局中定义了和内置命名空间中同名的名字时,会使用全局名字
多个自定义函数有多个独立的局部空间,相互之间不能调用
当我们在调用函数的时候,实际上是根据函数名找到这个函数的地址然后再执行
作用域:
全局作用域:里面是全局命名和内置命名
局部作用域:局部中的名字
全局中的变量可以拿来局部中查看,但是在局部中对全局中变量的操作不会改变全局中的数据。
s = input(‘>>>‘) h = 0 def input1(s): h = 1 print(h)