2020-12-04--函数
函数
- 函数简介
- 函数参数
- 实参的传递方式
- 1.位置参数
- 2.关键字参数
- 不定长参数
- 参数的解包(拆包)
- 创建一个元组
- 创建一个字典
- 文档字符串(doc str)
- 文档字符串
- 作用域(scope)
- 全局作用域
- 函数作用域
- 命名空间(namespace)
函数简介
函数也是一个对象
对象是內存中专门用来存储数据一块区域
函数可以用来保存一些可执行的代码,并且可以在需要的时候,对这些语句进行多次调用
创建函数:
def 函数名([参数1,参数2]):
代码块
函数名必须要符号标识符的规范
可以包含字母、下划线、数字,但是不能数字开头
函数保存的代码不会立刻执行,需要调用函数代码才会执行
调用函数:
函数对象()
定义函数一般都是实现某种功能
函数参数
定义一个函数时可以在函数名后面()中定义一个数量不等的形参
多个形参之间的使用用,隔开
形参(形式参数),定义形参就相当于在函数内部声明了变量,但是并不赋值
实参(实际参数)
如果函数定义时,指定了形参,那么在调用函数时, 也必须传递实参
实参将会赋值对应得形参
def fn() :
print(“这是一个函数”)
print(fn)
print(type(fn))
打印fn
fn是函数,fn()调用函数
print是函数,print()调用函数
定义函数时指定形参,调用函数时指定实参
def sum():
print(a+b)
sum()
定义一个函数,定义形参时,可以为形参指定默认值
指定了默认值以后,如果用户传递了参数则默认值没有作用,如果用户没有传递
,则默认值会生效
def fn(a,b,c = 20):
print(‘c=’,c)
fn(1,2)
实参的传递方式
1.位置参数
位置参数就是将对应位置的实参复制给对应位置的形参
第一个实参赋值给第一个形参,第二个实参赋值给第二个形参
2.关键字参数
关键字参数,可以不按照形参定义的顺序去传递参数,而直接根据参数名去传递参数
fn(a=2,b=3)
print(‘hello’,end=’’)
位置参数和关键字参数可以混合使用
混合使用关键字参数和位置参数时,必须将位置参数写到前面
def fn2(a):
实参可以传递任意的类型的对象
b=123
b=‘12’
b=[1,2,3]
b={a,c,s}
b=None
在函数中对形参进行重新赋值的后不会影响其他的变量
不定长参数
定义一个参数,可以求任意个数之和
在定义函数时候可以在形参前边加上一个*,这样可以获取到所有的实参
它将会将所有实参保存到一个元组中
1.a,b,*c=(1,2,3)
2.a会接受所有位置的实参,并且会将这些实参统一保存到一个元组中(装包)
def fn(a):
print(‘a=’,a,type(a))
fn(1,2,3)
带星号的参数只能使用一个
可以和其他的参数配合使用
但是可变参数不是 必须写在最后,但是在注意,带的参数后的所有的参数,必须以关键字参数的形式传递,第一个参数给a,,剩下的参数给b的元组,c必须使用关键字参数
def fn2(a,b,c):
print(‘a=’,a)
print(‘b=’,b)
print(‘c=’,c)
fn2(1,2,4,5,c=2)
如果形参的开头写一个,则要求我们的所有的参数必须以关键字参数的形式传递
def fn2(,a,b,c):
print(‘a=’,a)
print(‘b=’,b)
print(‘c=’,c)
fn2(a=1,b=2,c=2)
形参只能接受参数位置,而不是接收关键字参数
def fn3(*a)
print(‘a=’,a)
错误:fn3(b=2,c=4)
形参可以接收其他关键字参数,它会将这些参数统一保存到一个字典中
字典的key就是参数的名字,字典的value就是参数的值
**的形参必须只有一个,必须写在所有参数的最后
def fn3(**a)
print(‘a=’,a)
fn3(b=2,c=4)
参数的解包(拆包)
def fn4(a,b,c):
print(‘a=’,a)
print(‘b=’,b)
print(‘c=’,c)
t=(10,20,30)
传递实参时,也可以在序列类型的参数前添加星号,这样他就会自动将序列中的元素依次作为参数传递
这里要求序列中的元素的个数必须和形参的个数一致
创建一个元组
t=(10,20,30)
fn4(*t)
创建一个字典
d={‘a’:1,‘b’:2,‘c’:3}
通过**来对字典进行解包
fn4(**d)
函数返回值
返回值就是函数执行以后返回的结果
可以通过return来指定函数的返回值
可以直接使用函数的返回值。也可以通过一个变量来接受函数的返回值
return 后边跟什么值函数就会返回什么值
return 后面可以跟任意的对象,也可以是一个函数
def fn():
return ‘hello’
r=fn()
print®
如果仅仅写一个return 或者不写return则相当于retun None
def fn3():
print(‘hello’)
return
在函数中,return后的代码都不会执行,return一旦执行函数自动结束
所以和break和continue有区别
def fn3():
print(‘hello’)
return
print(‘1’)
fn5和fn5()的区别
print(fn5)# fn是函数对象,打印fn5实际上是对打印函数对象
print(fn5())#fn()是调用函数,打印fn5()实际上是打印fn5()函数的返回值
文档字符串(doc str)
help()是python中的内置函数
通过help()函数可以查询python的函数用法
语法:help(函数对象)
help(print)#print()函数的使用说明
文档字符串
在定义函数时,可以在函数内部编写文档字符串,文档字符串就是函数的说明
当我们编写了文档字符串时,就可以通过help()函数来查看函数()来说明
文档字符串非常简单,其实直接在函数的第一行写一个字符串就是文档字符串
def fn(a:int,b:bool,c:str=‘hello’) -> int:
‘’’
这是一个文档字符串
‘’’
return 10
help(fn)
作用域(scope)
作用域是指变量生效的区域
b=20#全局变量
def fn():
a=10 #a定义函数内部,所以他的作用域就是函数内部,函数外部无法访问
print(‘函数内部:’,‘a=’,a)
fn()
print(‘函数外部:’,‘b=’,b)
在python中一共有两种作用域
全局作用域
全局作用域在程序执行时创建,在程序执行结束时销毁
所以函数以外的区域都是全局作用域
在全局作用域中定义的变量,都属于全局变量,全局变量可以在程序的任意位置被访问
函数作用域
函数作用域在函数调用时创建,在调用结束时销毁
函数每调用一次就会产生一个新的函数作用域
在函数作用域中定义的变量都是局部变量,她只能在函数内部被访问
当我们使用变量时,会优先在当前作用域中寻找该变量,如果有则使用,如果没有则继续去上一级中寻找,直到找到为止,否则抛出异常
a=10
def fn2():
#a=20 在函数中为变量赋值时,默认都是为局部变量赋值
#如果希望在函数内部修改全局变量,则需要使用global关键字来声明变量
global a声明在函数内部的使用a是全局变量,此时再去修改a时,就是在修改全局的a
a=2#修改全局变量
print(a)
fn3()
命名空间(namespace)
命令空间指的是变量存储的位置,每一个变量都需要存储到指定的命名空间
每一个作用域都会有一个它对应的命名空间
全局命名空间,用来保存全局变量,函数命名空间用来保存函数的变量
命名空间实际上就是一个字典,是一个专门用来存储变量的字典
locals()用来获取当前作用域的命名空间
如果在全局作用域中调用locals()则获取全局命名空间,如果在函数作用域中调用locals()则获取函数命名空间返回的是一个字典
scope=lcoals()#当前命名空间
print(scope)
scope[‘c’]=1000 #向字典中添加key-value就相当于在全局创建了一个变量
def fn4():
scope=locals()在函数内部调用locals()会获取函数的命名空间
scope[‘b’]=20可以通过scope来操作函数的命名空间
globals()函数可以用来在任意的位置获取 全局命名空间
global_scope=globals()
print(global_scope[‘a’])
fn4()
2020-12-04--函数
函数
- 函数简介
- 函数参数
- 实参的传递方式
- 1.位置参数
- 2.关键字参数
- 不定长参数
- 参数的解包(拆包)
- 创建一个元组
- 创建一个字典
- 文档字符串(doc str)
- 文档字符串
- 作用域(scope)
- 全局作用域
- 函数作用域
- 命名空间(namespace)
函数简介
函数也是一个对象
对象是內存中专门用来存储数据一块区域
函数可以用来保存一些可执行的代码,并且可以在需要的时候,对这些语句进行多次调用
创建函数:
def 函数名([参数1,参数2]):
代码块
函数名必须要符号标识符的规范
可以包含字母、下划线、数字,但是不能数字开头
函数保存的代码不会立刻执行,需要调用函数代码才会执行
调用函数:
函数对象()
定义函数一般都是实现某种功能
函数参数
定义一个函数时可以在函数名后面()中定义一个数量不等的形参
多个形参之间的使用用,隔开
形参(形式参数),定义形参就相当于在函数内部声明了变量,但是并不赋值
实参(实际参数)
如果函数定义时,指定了形参,那么在调用函数时, 也必须传递实参
实参将会赋值对应得形参
def fn() :
print(“这是一个函数”)
print(fn)
print(type(fn))
打印fn
fn是函数,fn()调用函数
print是函数,print()调用函数
定义函数时指定形参,调用函数时指定实参
def sum():
print(a+b)
sum()
定义一个函数,定义形参时,可以为形参指定默认值
指定了默认值以后,如果用户传递了参数则默认值没有作用,如果用户没有传递
,则默认值会生效
def fn(a,b,c = 20):
print(‘c=’,c)
fn(1,2)
实参的传递方式
1.位置参数
位置参数就是将对应位置的实参复制给对应位置的形参
第一个实参赋值给第一个形参,第二个实参赋值给第二个形参
2.关键字参数
关键字参数,可以不按照形参定义的顺序去传递参数,而直接根据参数名去传递参数
fn(a=2,b=3)
print(‘hello’,end=’’)
位置参数和关键字参数可以混合使用
混合使用关键字参数和位置参数时,必须将位置参数写到前面
def fn2(a):
实参可以传递任意的类型的对象
b=123
b=‘12’
b=[1,2,3]
b={a,c,s}
b=None
在函数中对形参进行重新赋值的后不会影响其他的变量
不定长参数
定义一个参数,可以求任意个数之和
在定义函数时候可以在形参前边加上一个*,这样可以获取到所有的实参
它将会将所有实参保存到一个元组中
1.a,b,*c=(1,2,3)
2.a会接受所有位置的实参,并且会将这些实参统一保存到一个元组中(装包)
def fn(a):
print(‘a=’,a,type(a))
fn(1,2,3)
带星号的参数只能使用一个
可以和其他的参数配合使用
但是可变参数不是 必须写在最后,但是在注意,带的参数后的所有的参数,必须以关键字参数的形式传递,第一个参数给a,,剩下的参数给b的元组,c必须使用关键字参数
def fn2(a,b,c):
print(‘a=’,a)
print(‘b=’,b)
print(‘c=’,c)
fn2(1,2,4,5,c=2)
如果形参的开头写一个,则要求我们的所有的参数必须以关键字参数的形式传递
def fn2(,a,b,c):
print(‘a=’,a)
print(‘b=’,b)
print(‘c=’,c)
fn2(a=1,b=2,c=2)
形参只能接受参数位置,而不是接收关键字参数
def fn3(*a)
print(‘a=’,a)
错误:fn3(b=2,c=4)
形参可以接收其他关键字参数,它会将这些参数统一保存到一个字典中
字典的key就是参数的名字,字典的value就是参数的值
**的形参必须只有一个,必须写在所有参数的最后
def fn3(**a)
print(‘a=’,a)
fn3(b=2,c=4)
参数的解包(拆包)
def fn4(a,b,c):
print(‘a=’,a)
print(‘b=’,b)
print(‘c=’,c)
t=(10,20,30)
传递实参时,也可以在序列类型的参数前添加星号,这样他就会自动将序列中的元素依次作为参数传递
这里要求序列中的元素的个数必须和形参的个数一致
创建一个元组
t=(10,20,30)
fn4(*t)
创建一个字典
d={‘a’:1,‘b’:2,‘c’:3}
通过**来对字典进行解包
fn4(**d)
函数返回值
返回值就是函数执行以后返回的结果
可以通过return来指定函数的返回值
可以直接使用函数的返回值。也可以通过一个变量来接受函数的返回值
return 后边跟什么值函数就会返回什么值
return 后面可以跟任意的对象,也可以是一个函数
def fn():
return ‘hello’
r=fn()
print®
如果仅仅写一个return 或者不写return则相当于retun None
def fn3():
print(‘hello’)
return
在函数中,return后的代码都不会执行,return一旦执行函数自动结束
所以和break和continue有区别
def fn3():
print(‘hello’)
return
print(‘1’)
fn5和fn5()的区别
print(fn5)# fn是函数对象,打印fn5实际上是对打印函数对象
print(fn5())#fn()是调用函数,打印fn5()实际上是打印fn5()函数的返回值
文档字符串(doc str)
help()是python中的内置函数
通过help()函数可以查询python的函数用法
语法:help(函数对象)
help(print)#print()函数的使用说明
文档字符串
在定义函数时,可以在函数内部编写文档字符串,文档字符串就是函数的说明
当我们编写了文档字符串时,就可以通过help()函数来查看函数()来说明
文档字符串非常简单,其实直接在函数的第一行写一个字符串就是文档字符串
def fn(a:int,b:bool,c:str=‘hello’) -> int:
‘’’
这是一个文档字符串
‘’’
return 10
help(fn)
作用域(scope)
作用域是指变量生效的区域
b=20#全局变量
def fn():
a=10 #a定义函数内部,所以他的作用域就是函数内部,函数外部无法访问
print(‘函数内部:’,‘a=’,a)
fn()
print(‘函数外部:’,‘b=’,b)
在python中一共有两种作用域
全局作用域
全局作用域在程序执行时创建,在程序执行结束时销毁
所以函数以外的区域都是全局作用域
在全局作用域中定义的变量,都属于全局变量,全局变量可以在程序的任意位置被访问
函数作用域
函数作用域在函数调用时创建,在调用结束时销毁
函数每调用一次就会产生一个新的函数作用域
在函数作用域中定义的变量都是局部变量,她只能在函数内部被访问
当我们使用变量时,会优先在当前作用域中寻找该变量,如果有则使用,如果没有则继续去上一级中寻找,直到找到为止,否则抛出异常
a=10
def fn2():
#a=20 在函数中为变量赋值时,默认都是为局部变量赋值
#如果希望在函数内部修改全局变量,则需要使用global关键字来声明变量
global a声明在函数内部的使用a是全局变量,此时再去修改a时,就是在修改全局的a
a=2#修改全局变量
print(a)
fn3()
命名空间(namespace)
命令空间指的是变量存储的位置,每一个变量都需要存储到指定的命名空间
每一个作用域都会有一个它对应的命名空间
全局命名空间,用来保存全局变量,函数命名空间用来保存函数的变量
命名空间实际上就是一个字典,是一个专门用来存储变量的字典
locals()用来获取当前作用域的命名空间
如果在全局作用域中调用locals()则获取全局命名空间,如果在函数作用域中调用locals()则获取函数命名空间返回的是一个字典
scope=lcoals()#当前命名空间
print(scope)
scope[‘c’]=1000 #向字典中添加key-value就相当于在全局创建了一个变量
def fn4():
scope=locals()在函数内部调用locals()会获取函数的命名空间
scope[‘b’]=20可以通过scope来操作函数的命名空间
globals()函数可以用来在任意的位置获取 全局命名空间
global_scope=globals()
print(global_scope[‘a’])
fn4()
发布评论