函数参数类型
不可变类型参数:整数、字符串、元组。
fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
可变类型:列表,字典。如 fun(la),
则是将 la 真正的传过去,修改后 fun 外部的 la 也会受影响
- 传递不可变类型参数,不会影响参数本身。
- 传递可变类型参数,会影响参数本身。
def func1(name,names = []):
names.append(name)
print(a)
func1('Tom')
func1('Jack')
命名空间
- 概述
- 命名空间指的是保存程序中的变量名和值的地方。命名空间的本质是一个字典,
用来记录变量名称和值。字典的 key 是变量的名称,字典的 value 对于的是变量
的值。
例如 {‘name’:’zs’,’age’:10}
- 命名空间指的是保存程序中的变量名和值的地方。命名空间的本质是一个字典,
- 分类
- 局部
- 每个函数都有自己的命名空间,叫做局部空间,它记录了函数的变量,包括函数
的参数 和局部定义的变量
- 每个函数都有自己的命名空间,叫做局部空间,它记录了函数的变量,包括函数
- 全局
- 每个模块拥有它自已的命名空间,叫做全局命名空间,它记录了模块的变量,包
括函数、 类、其它导入的模块。
- 每个模块拥有它自已的命名空间,叫做全局命名空间,它记录了模块的变量,包
- 内置
- 任何模块均可访问它,它存放着内置的函数和异常。
input,print,str,list,tup
- 任何模块均可访问它,它存放着内置的函数和异常。
- 局部
- 命名空间的访问
- locals
- global
- 命名空间的加载顺序
- 内置命名空间(程序运行前加载)->全局命名空间(当程序运行的时候加载全局命
名空间)->局部命名空间(程序运行中:函数被调用时才加载)当函数返回结果 或
抛出异常时,被删除。每一个递归调用的函数都拥有自己的命名空间
- 内置命名空间(程序运行前加载)->全局命名空间(当程序运行的时候加载全局命
- 命名空间的查找顺序
- 局部->全局->内置
作用域
- LEGB
- 注意:
在 python 中,模块(module),类(class)、函数(def、lambda)会产生新的
作用域,其他代码块是不会产生作用域的,也就是说,类似条件判断(if……else)、
循环语句(for x in data)、异常捕捉(try…catch)等的变量是可以全局使用的
for i in range(10):
print(i)
#循环结束后,依旧可以使用i
print(i)
全局变量与局部变量
- 概念
- 区别
- 在函数中访问全局变量
- 在函数中修改全局变量
- 不可变类型的全局变量(global的使用)
- 可变类型的全局变量
内置函数
- 查看内置函数
import builtins print(dir(builtins))
- abs()函数
- 求数字的绝对值
ret = abs(-21)
print(ret)
- max()函数
- (1)简单使用 max()
- (2)使用 key 关键字
- map()函数
- 有两个参数,第一个参数是一个函数,第二个参数是可迭代的内容。
函数会依次作用在可迭代内容的每一个元素上进行计算,然后返回一个新的可迭
代内容
- 有两个参数,第一个参数是一个函数,第二个参数是可迭代的内容。
1.求 lst 中每一个元素的平方值
2.求两个列表对应位置元素的和
- filter() 函数
- 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成
的新列表
- 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成
def func2(x):
return x % 2 == 0
l = filter(func2,[1,2,3,4,5])
print(type(l))
for a in l:
print(a)
- zip()函数
- zip 函数接受任意多个可迭代对象作为参数,将对象中对应的元素打包成一个
tuple, 然后返回一个可迭代的 zip 对象.这个可迭代对象可以使用循环的方式列出其元
素
若多个可迭代对象的长度不一致,则所返回的列表与长度最短的可迭代对象相
同
- zip 函数接受任意多个可迭代对象作为参数,将对象中对应的元素打包成一个
- 使用示例:
str1 = 'abc'
str2 = '1234'
ret = zip(str1,str2)
for i in ret:
print(i)
匿名函数
- 定义
- 变量名= lambda 参数:表达式(block)
- 参数:可选,通常以逗号分隔的变量表达式形式,也就是位置参数
表达式:不能包含循环、return,可以包含 if…else…
- 使用
- max(key=lambda)
- sort(key=lambda)
- 注意:
- 1.表达式中不能包含 循环,return
- 2.可以包含 if…else…语句(三元条件表达式).
- 3.表达式计算的结果直接返回