python函数
参数:
形参:只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参的作用域只在函数内部。
实参:有确定值得参数,所有的数据类型都可以被当做参数传给函数。
局部变量:作用域只在当前函数内部,外部变量默认不能被函数内部修改,只能引用。如果想在函数里修改全局变量,必须global,但是强烈建议不要使用,会增加代码调试难度。
函数内部是可以修改列表,字典,集合,实例
位置参数:按顺序
默认参数:必须放在位置参数后面
关键参数:放在位置参数后面,可以指定值
非固定参数:*args = () 以位置参数的形式传入 **kwargs = {} 以关键参数形式传入
| 参数 | 定义 |
|---|---|
| 形参 | 只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参的作用域只在函数内部。 |
| 实参 | 有确定值得参数,所有的数据类型都可以被当做参数传给函数。 |
| 局部变量 | 作用域只在当前函数内部,外部变量默认不能被函数内部修改,只能引用。如果想在函数里修改全局变量,必须global,但是强烈建议不要使用,会增加代码调试难度。 |
| 位置参数 | 按顺序 |
| 默认参数 | 必须放在位置参数后面 |
| 关键参数 | 放在位置参数后面,可以指定值 |
| 非固定参数 | *args = () 以位置参数的形式传入 **kwargs = {} 以关键参数形式传入 |
def stu_register(name,age,course,country='CN',hobbie='girl',*args,**kwargs): print("----注册学生信息-----") print("姓名",name) print('age',age) print('国籍',country) print('课程'course) print('爱好',hobbie) print(args,kwargs) stu_register('孙悟空',21,'CN','linux','北京','IT,'MAN',id='stu1111')
递归
特性:
1 必须有一个明确的结束条件
2 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3 递归效率不高,递归层次过多会导致栈溢出(栈的长度是2M)
4 return 的作用,代表函数的结束,返回函数结果
小练习:二分查找
data = range(4200000000) def binary_search(find_str, data_set, count): mid = int(len(data_set)/2) if mid == 0: if data_set[mid] == find_str: print("find it", find_str, count) else: print("can't find", count) return if data_set[mid] == find_str: print("find it", find_str, count) elif data_set[mid] > find_str: binary_search(find_str, data_set[:mid], count+1) elif data_set[mid] < find_str: binary_search(find_str, data_set[mid+1:], count+1) binary_search(7, data, 1)
匿名函数
匿名函数最复杂的运算是三元运算
高阶函数
1、把一个函数的内存地址当做参数传给另一个函数
2、一个函数把另一个函数当做返回值返回
浙公网安备 33010602011771号