函数
函数、对象、模块
创建函数
# 新建函数,def为关键字
def MyfirstFunction():
print("happy")
print("good job")
# 调用函数
MyfirstFunction()
# happy
# good job
函数的参数
def MysecondFunction(name):
print(name+"很可爱")
MysecondFunction('小美')
MysecondFunction('小幽')
# 小美很可爱
# 小幽很可爱
两个参数(可以有多个参数,最好2-3个,要做好注释)
def add(num1,num2):
result=num1+num2
print(result)
add(1,2)
# 3
函数的返回值 - return
def add(num1,num2):
return (num1+num2)
print (add(5,6))
# 11
-
实参和形参-见习题1
形参-parameter
实参-argument -
函数文档-见习题1
-
关键字参数
def SaySome(name,words):
print(name+"->"+words)
SaySome(words="让编程改变世界", name = "小甲鱼")
# 小甲鱼->让编程改变世界
- 默认参数
def SaySome(name='小甲鱼',words="让编程改变世界"):
print(name+"->"+words)
SaySome()
# 小甲鱼->让编程改变世界
- 收集参数(可变参数)
def functionname(arg1, arg2=v, *args):
"函数_文档字符串"
function_suite
return [expression]
args - 可变参数,可以是从零个到任意个,自动组装成元组。
加了星号()的变量名会存放所有未命名的变量参数。
全局变量和局部变量
- 全局变量和局部变量
定义在函数内部的变量拥有局部作用域,该变量称为局部变量。
定义在函数外部的变量拥有全局作用域,该变量称为全局变量。 - 函数内部不要试图修改全局变量,python会使用屏蔽(shadowing)方式保护全局变量。
count = 5
def MyFun():
count = 10
print(10)
MyFun()
print(count)
# 10
# 5
- 使用global关键字:内部作用域修改外部作用域
count = 5
def MyFun():
global count
count = 10
print(10)
MyFun()
print(count)
# 10
# 10
内嵌函数(内部函数)
- 内部函数作用域在外部函数之内
def outer():
print('outer函数在这被调用')
def inner():
print('inner函数在这被调用')
inner() # 该函数只能在outer函数内部被调用
outer()
# outer函数在这被调用
# inner函数在这被调用
闭包
- 是函数式编程的一个重要的语法结构,是一种特殊的内嵌函数。
- 如果在一个内部函数里对外层非全局作用域的变量进行引用,那么内部函数就被认为是闭包。
- 通过闭包可以访问外层非全局作用域的变量,这个作用域称为 闭包作用域。
lambda表达式
函数习题
- 怎么给函数编写文档?
函数文档
def MyFirstFunction(name):
'函数定义过程中的name叫形参'
# 因为它只是一个形式,表示占据一个参数位置
print ("传递进来的"+name+'叫做实参,因为它是具体的参数值')
MyFirstFunction('小甲鱼')
# 传递进来的小甲鱼叫做实参,因为它是具体的参数值
help(MyFirstFunction)
# Help on function MyFirstFunction in module __main__:
# MyFirstFunction(name)
# 函数定义过程中的name叫形参
- 怎么给函数参数和返回值注解?
参数注解就是,在定义函数的时候,参数列表内部的参数后面,加上冒号和要传入的类型,例:
def accumlate(x:int, y:int):
return x*y
返回值注解就是:
def accumlate(x:int, y:int) -> int:
return x*y
-
闭包中,怎么对数字、字符串、元组等不可变元素更新。
-
分别根据每一行的首元素和尾元素大小对二维列表 a = [[6, 5], [3, 7], [2, 8]] 排序。(利用lambda表达式)
-
利用python解决汉诺塔问题?
有a、b、c三根柱子,在a柱子上从下往上按照大小顺序摞着64片圆盘,把圆盘从下面开始按大小顺序重新摆放在c柱子上,尝试用函数来模拟解决的过程。(提示:将问题简化为已经成功地将a柱上面的63个盘子移到了b柱)
函数学习资料
https://github.com/datawhalechina/team-learning-program/tree/master/PythonLanguage
https://www.runoob.com/python3/python3-tutorial.html
https://mp.weixin.qq.com/s/gKhXS8JVU8dZBHJF7sIFsw
https://www.bilibili.com/video/av4050443(重点参考资料)