函数
生成函数
1. 定义函数
def function(para1, para2)
""" # 注释函数功能、参数、结果
function:
para1:
para2:
return:
"""
result = para1 + para2
return result
2. 重构函数
Refactor >>> Extract Method #将代码重构为函数
位置参数(positional argument) / 关键字参数(keyword argument)
传递参数时:按位置传递参数值 / 参数名 = 参数值
定义函数时使用 *, 隔离参数
*, 前面的参数为位置参数,按位置传递参数值
后面的参数为命名关键字参数,必须按 “参数名 = 参数值” 的形式传参
function(args ) # 可变参数: 将参数打包成元组传入function,可传入任意数量位置参数
function(**args) # ** 关键字参数:将参数以键值对的形式打包成字典传入function,可传入任意数量命名关键字参数
一等函数 # Python中的函数是高阶函数
- 函数可作为函数的参数
- 函数可作为函数的返回值
- 函数可赋值给变量
把函数作为函数的参数或者返回值,通常称之为高阶函数,可实现对原有函数的解耦合操作。
def fun(a, b)
def calc(init, fun, *args, **kwargs) # 将不缀 () 的fun函数名作为参数传入calc函数,fun()意味要函数的返回值
Lambda函数 # 没有名字且一句话就能写完的函数
def add(x, y)
return x + y
lambda x, y : x + y # 两函数等效
递归函数 # 函数直接或间接调用了自身
- 递归公式 # 调用自身
- 收敛条件 # 停止递归的条件
递归函数一定要收敛,尽快结束
栈 (FILO: first in last out) # 512k ~ 1MB 指针或索引
对象的引用通常存放于栈,通过引用可访问对象并向其发出消息
函数有属于自己的栈结构,保存现场就是将整个栈结构保存起来
保存现场 —> (入栈) 调用函数 —> 函数执行结束或执行return (出栈) —> 恢复现场
官方CPython默认调用栈为1000层,无休止调用会耗尽栈空间,导致程序崩溃import sys
sys.setrecursionlimit(99999) # 不建议
堆(heap) # 内存中不被其他程序占用的空间
对象一般储存于堆
垃圾对象 # 自动化内存管理回收
常量池
foo # fuck up
bar # beyond all recognization
调用包和函数
使用包(python package) --> 通过模块来管理函数
包 --> 文件夹
模块 --> python文件
import # 调取
from math import factorial as f # 将数学包中导入函数 factorial 并别名为f as == alias(别名)
系统包
math # 数学相关
getpass #
getpass.getpass() # 用掩码接收变量
time # 时间模块
time.time() # 调取当前时间
time.sleep(0.5) # 暂停500毫秒
random
random.randrange(a,b) # 导入[a,b)范围内的随机数random.sample(lists,a) # 从list列表中无放回抽样a个数据
random.choices(lists,k=a) # 从list列表中有放回抽样a个数据(k=a 命名关键字参数,name = value 方式传参)
random.choice(lists) # 从list列表抽1个数据(choice:单数抽一个数据;choices:复数抽一个列表)
random.shuffle(lists) # 将list列表随机乱序
os # 操作系统
os.system(‘cls’) # 清屏
string # 字符串
string.ascii_lowercase # 小写字母
系统函数
range(a,b,c) # [a,b) 范围内以c为步长,逐个取值。当 c<0 and a>b,降序取值
sum() # ()内所有值求和
max/min(list,key=) # 列表中key最大/最小值
sorted(dict, key=dict.get) # 根据字典dict的值进行排序,返回由升序键组成的列表
len() # ()内变量的长度
type() # 返回数据类型
ord() # 将字符处理为对应的编码
chr() # 将编码处理为对应的字符
input().lower() # 将输入内容变为小写字母
enumerate() # 处理列表使可以取到序号与值
zip(a, b) # 将a,b组成一个二元组
True if bool else False # 三元条件运算
del # 删除元素
break # 中断、跳出循环
pass # 跳过代码
end = '\t' # 制表符
a, b = b, a # a, b交换数据
datetime.now() # 获得当前时间日期