使用关键词def定义函数,定义函数的语法格式如下
def <函数名> (参数列表):
<函数语句>
return <返回值>
其中参数列表和返回值不是必须的
例如:定义一个基本的输出信息函数hello()。
def hello():
print("Hello World")
hello()
在Python中定义函数不需要定义函数的返回值类型和定义参数的类型
函数文档
函数文档的作用是描述该函数的功能以及一些注意事项:
函数的文档字符串可以通过特殊属性_ _doc_ _获取
import emoji
help(emoji)
导入模块
import module_name
只导入模块中指定的特定函数
from module_name import function_name
导入多个指定函数用逗号分隔
位置参数
必须参数被称为位置实参。
#定义函数 info()打印姓名和年龄
def info(name,age):
print('姓名为',name)
print('年龄为',age)
info()
当使用位置实参时没有实参传入,会报错
可以为函数的参数提供默认值
#定义函数 info()打印姓名和年龄
def info(name='小明',age=18):
print('姓名为',name)
print('年龄为',age)
info()
另外,在定义函数的时候,位置参数必须在默认参数的前面,否则就会出错:
可变长度参数
若实参个数不确定,在定义函数的时候,形参就可以使用收集参数来“搞定”。而语法也很简单,仅需要在参数前面加上星号(*)即可:
def functionname([formal_args,]*var_args_tuple):
"""
函数文档
"""
function_suite
return[expression]
加了“*” 的变量名会保存所有未命名的变量参数。函数在调用时可变参数会被作为元组来进行处理,如果没有指定参数他就是一个空元组
如果在参数名前加上两个星号“**” 函数在调用时可变长度参数会被作为字典来处理
例如,print()的原型如下:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
objects参数是一个收集参数,如果传入多个参数,将依次打印出来;sep参数指定多个参数之间的分隔符,默认是空格;end参数指定以什么字符结束打印,默认是换行符;file参数指定输出的位置;flush指定是否强制刷新缓存。
全局变量的作用域是整个模块,也就是代码段内所有的函数内部都可以访问到全局变量。但要注意的一点是,在函数内部仅仅去访问全局变量就好,不要试图去修改它。
LEGB
• L-Local:函数内的名字空间。
• E-Enclosing function locals:嵌套函数中外部函数的名字空间。
• G-Global:函数定义所在模块的名字空间。
• B-Builtin:Python内置模块的名字空间。
那么变量的查找顺序依次就是L→E→G→B。
global和nonlocal关键字
1.global关键字
global关键字可以在函数内部使用全局变量
def fun():
global a
a = 1
a += 5
print("fun函数内a的值=",a)
a = 0
print("全局变量a的值",a)
fun()
print("此时是调用函数fun后全局变量a的值",a)
通过global 将局部变量a变为全局变量
2.nonlocal关键字
在嵌套的函数中,可以使用nonlocal关键字修改嵌套作用域中的变量
def fun():
a = 1
def funin():
nonlocal a
a = 6
print("调用内部函数之前,a的值为:",a)
funin()
print("对变量a使用nonlocal关键字重新赋值后,a的值为:",a)
fun()
递归函数
导入模块
第一种:import 模块名
第二种:from 模块名 import 函数名
第三种:import 模块名 as 新名称
_ _name_ _='_ _main_ _'