函数基础
定义
def func( )
def 关键字 -- 定义<br> func 函数名 -- 和变量定义规则一样<br> () 必须要写格式<br> : 声明语句结束
def my_len()<br> 函数体
函数的返回值
关键字 return
返回
def func( ):<br> print(123)<br> ruturn 456
位置传参
def func(a):<br> print(a)<br>func(1)
a -- 形参<br>1 -- 实参
形参
函数定义的时候叫做形参<br> # 位置参数<br> # 默认参数<br> # 混合参数
实参
函数调用的时候叫做实参<br> # 位置参数<br> # 关键字参数<br> # 混合参数
位置参数
def func(a,b):<br> pass
默认参数
def func(a,b=1):<br> pass
关键字参数
def func(b,c,a=3 ):<br> print(a,b,c)<br>func(a=5,b=3,c=2)
混合参数
def func(a,b,c)<br> print(a,b,c)<br>func(1,2,c=5)
函数的动态参数
*args
接收动态的位置参数
万能的(接受任意多个)的位置参数
在函数定义的时候叫做聚合
在函数中叫做打散
万能传参
def func(*agrs,**kwargs):<br> print(agrs,kwargs)<br>func(1,2,3,4,5,6,7,8,a=1,b=2,c=3)
名称空间
命名空间分类
内置空间
print( ),len( ),input( )
全局空间
当前py文件需要开辟的空间存放在全局空间
取值空间
局部空间 - 全局空间 - 内置空间(找不到就报错)
函数的嵌套
def func():<br> a = 1<br> def foo():<br> b = 2<br> print(b) <br> print(a)<br> def f1():<br> print(b)<br> return f1()<br> return foo()<br>print(func()) # 2 1 2 None
函数的互相引用
def func():<br> a = 1<br> foo()<br> print(a)<br><br>def foo():<br> b = 2<br> print(b)<br>func() # 2 1
nonlocal
在外层的函数中,修改局部空间的变量值.完全不涉及全局变量<br>
只修改离它最近的一层,最近的一层没有变量继续向上找,直到找到最外层函数
函数名的第一类对象及使用
函数名可以当做值被赋值
def func():<br> print(1)<br>print(func)<br>a = func<br>a() # <function func at 0x000001A24F8E9B70> 1
函数名可以当做元素存放在容器中
def func():<br> print(1)<br>lst = [func,func,func]<br>for i in lst:<br> i() # 1 1 1
函数名可以当做另一个函数的参数
def func(f):<br> f()<br>def foo():<br> print(123)<br>func(foo) # 123<br>
函数名可以当做返回值
def func():<br> def foo():<br> print(123)<br> return foo<br>a = func()<br>a() # 123
迭代器
可迭代对象
list,dict,str,set,tuple
可迭代对象 使用灵活
迭代器
文件句柄"f"是个迭代器
f = open("xxxx","w")<br>f.__iter__()<br>f.__next__()
将可迭代对象转换成迭代器
lst = [1,2,3,4,6]<br>new_list = lst.__iter__() <br>new_list.__iter__()<br>new_list.__next__()
for循环的本质
s = "12345"<br>new_s = s.__iter__()<br>while True:<br> try:<br> print(new_s.__next__())<br> except StopIteration:<br> break
生成器
生成器与迭代器的区别
迭代器是python中内置的一种节省空间的工具
生成器的本质就是一个迭代器
迭代器是python自带的
生成器是程序员自己写的
定义
基于函数,函数中存在yield就是一个生成器<br>
函数名 + ( )就是产生一个生成器<br>
def func():<br> if 3>2:<br> yield "你好" <br> if 4>2:<br> yield "我好"<br> yield "大家好"<br>g = func() <br>print(g.__next__())<br>print(g.__next__())<br>print(g.__next__())
优点及注意事项
节省空间 -- 惰性机制<br>不能逆行<br>一次性<br>一个next对应一个yield<br>yield 能够进行返回内容,还能够返回多次<br>yield能够临时停止循环<br>yield 能够记录执行的位置
输出方式
def foo():<br> for i in range(10):<br> pass<br> yield i<br> count = 1<br> while True:<br> yield count<br> count += 1<br>g = foo()<br>print(next(g)) # ---- 推荐使用<br>print(next(g))<br>print(next(g))<br>print(next(g))<br>print(next(g))
坑
最后输出时调用函数要找变量接收<br>否则会循环输出
生成器应用场景
一次性打印全部结果,数据过大时特别消耗内存
def func():<br> lst = []<br> for i in range(100000):<br> lst.append(i)<br> return lst<br>print(func())
每次打印可选的一部分,不用的部分不打印,节省空间
def func():<br> for i in range(100000):<br> yield i<br>g = func()<br>for i in range(50):<br> print(next(g))
yield from
将一个可迭代对象的元素逐个返回
def func():<br> lst1 = ["牛羊配","老奶奶花生米","卫龙","虾扯蛋","米老头","老干妈"]<br> lst2 = ["小浣熊","老干爹","亲嘴烧","麻辣烫","黄焖鸡","井盖"]<br> yield from lst1<br> yield from lst2<br>g = func()<br>print(next(g))<br>print(next(g))<br>print(next(g))<br>print(next(g))<br># 牛羊配<br># 老奶奶花生米<br># 卫龙<br># 虾扯蛋
所以循环第一个列表直到全部打印再循环第二个
内置函数一
eval() 执行字符串类型的代码,并返回最终结果
exec() 执行字符串类型的代码
以上两个函数过于强大 工作中禁止使用
hash() 获取一个对象(可哈希对象:int,str,bool,tuple)的哈希值
help() 函数用于查看函数或模块用途的详细说明
callable() 函数用于检查一个对象是否是可调用的,如果返回True,仍然可能调用失败;但如果返回False,调用对象object绝对不会成功
int() 函数用于将一个字符串或数字转换为整型
float() 函数用于将整数和字符串转换成浮点数
complex:函数用于创建一个值为 real + imag*j 的复数.如果第一个参数为字符串,则不需要指定第二个参数
bin() 将十进制转换成二进制
oct() 将十进制转换成十六进制字符串并返回
divmod() 计算除数与被除数的结果,返回一个包含商和余数的元组
round() 保留浮点数的小数位数,默认保留整数
pow() 求x**y次幂
bytes() 用于不同编码之间的转化
ord() 输入当前编码的位置数字找出其对应的字符
repr() 返回一个对象的string形式
all() 可迭代对象中,全都是True才是True
any() 可迭代对象中,有一个True 就是True