1.什么是函数:
函数是一个功能、是一个行为、是一个动作。
函数就是一个具有名称的功能代码的集合。
一段用来解决某一个问题的代码或者指令,具有名称的集合。
为什么使用函数:
减少代码重复!!!
2.python中如何使用函数
def 函数名称([参数列表]):
# 函数体
# 函数得到一个结果,如果调用者需要,则需要返回这个结果
# return 返回值
函数调用:
函数名称([实参列表])
|-- 函数的分类
|-- 全局变量在函数中的使用
|-- 函数调用的本质(内存模型)
|-- 引用传递和值传递
|-- Python函数的参数
|-- 函数递归
|-- 函数的分类
|-- 有无参数
|-- 有参函数
|-- 无参函数
|-- 是否存在返回值
|-- 有返回值的函数
|-- 无返回值的函数
|-- 定义者
|-- 系统函数
|-- 第三方函数
|-- 自定义的
以收快递为例:
receive_express
全局变量在函数中的使用
全局变量(global variable):定义在py文件中
局部(本地)变量(local variable):定义在函数或者类内部的就是局部变量
注意:在python,函数内部不允许修改全局变量,如果要在Python中强制修改全局变量,
在函数第一行,使用 "global 变量名称" 声明
函数调用过程:
函数在python中,本质就是一个对象!!!
函数的调用叫做压栈(push)!!!
调用完成后函数就需要立刻出栈(pop)!!
引用传递和值传递:
值传递,值传递仅仅会传递变量的值,不会对变量本身产生影响
引用传递,引用传递传递是对象的地址(也就是对象),因此会对对象的值产生影响
|-- 函数的参数问题
|-- 默认值
|-- 可变参数
|-- 命名参数
|-- 万能参数
|-- 函数作为参数传递到函数内部的问题
|-- lambda表达式(匿名函数)
|-- 偏函数和递归
|-- 闭包(后面再说)
python的main函数:
if name == ‘main’:
# python是一门脚本语言,所以它的main函数和c或者java等不一样
# python中的main函数并不是代码开始执行的位置,写在main函数中的代码一般是测试代码,用来测试当前模块
# 并不能导入到其他模块中
默认值参数:
在函数定义时,如果一些参数的值,一般都是不是不变某个值,则可以将该参数设置为默认参数,这样减少调用者的麻烦
可变参数:
*变量
关键字参数
**变量名称
万能参数
*args, **kwargs
字典的遍历方式:
>>> d = {'nickname': '帅哥刘', 'age': 16, 'gender': '男'}
>>>
>>>
>>> d
{'nickname': '帅哥刘', 'age': 16, 'gender': '男'}
>>>
>>> for k in d:
... print(k)
...
nickname
age
gender
>>> for k in d:
... print(k, d[k])
...
nickname 帅哥刘
age 16
gender 男
>>> for k in d:
... print(k, d.get(k))
...
nickname 帅哥刘
age 16
gender 男
>>> for k in d.keys():
... print(k, d.get(k))
...
nickname 帅哥刘
age 16
gender 男
>>>
>>> for k in d.values():
... print(k)
...
帅哥刘
16
男
>>> for k,v in d.items():
... print(k, v)
...
nickname 帅哥刘
age 16
gender 男
>>> for (k,v) in d.items():
... print(k, v)
...
nickname 帅哥刘
age 16
gender 男
函数作为参数传递到函数内部的问题:
python中,函数本质是一个对象,python中,函数的参数类型是python中的所有类型都可
结论:在python,函数可以作为参数传递到函数内部去
lambda表达式:
# 注意:如果需要返回值,不用添加return,会自动返回
lambda [参数列表]:函数体
lambda作用:
1、在python实现匿名函数
2、简化了编程
缺点:
1、降低了代码的可读性,提高代码的复杂度,提高了代码的维护成本
偏函数:
将一个函数的参数修改或者增加默认值,就称为偏函数
import functools
new_int = functools.partial(int, base=8)
>>> new_int("1234")
668
递归:
函数自身调用自身