python基础之函数(动态参数,注释,名称空间,第一类对象及使用和函数嵌套),,函数的动态参数1.函
python基础之函数(动态参数,注释,名称空间,第一类对象及使用和函数嵌套),,函数的动态参数1.函
函数的动态参数
1.函数的动态参数
位置参数,默认参数
动态参数的作用 *args
? 1.能够接受不固定长度参数
? 2.位置参数过多时可以使用动态参数
动态参数的用法:
def func(*c): #形参位置上的 * 是聚会 print(*c) #函数体中的 * 就是打散#func(1,2,3,4,5,6,7,8,9,0)
**def eat(a,b,*args): #位置参数,动态位置参数**
print(a,b,args) #结果:面条 包子 ('饺子', '馅饼', '馒头')
print(a,b,*args) #带上*是打散 面条 包子 饺子 馅饼 馒头
eat("面条","包子","饺子","馅饼",”馒头“)
按照位置面条和包子一一对应 a,b 剩余的全给了 args 动态位置参数
错误的示例
def eat(*args,a,b): # 位置参数,动态位置参数# print(a,b,args)## eat("面条","米饭","馒头","包子","煎饼")就会报错,因为args会全部接受实参,没有实参给a,b
def func (a,b,*args,c=2,**kwargs): #位置参数,动态参数,默认参数 print(a,b,c,args,c,kwargs) #1 2 100 (3, 4, 5, 6, 7, 8, 565) 100 {'w': 3, 'd': 3}func(1,2,3,4,5,6,7,8,565,c=100,w=3,d=3)
def func(a,b,*args,m=8,**kwargs,) #位置参数,动态参数,默认参数,动态关键字参数
位置参数,动态参数,默认参数,动态关键字参数
*args 程序之间约定(可以更换但是不建议更换)
**kwargs 程序员之间约定俗称(可以更换但是不建议更换)
*args 获取的是一个元组
**kwargs 获取的是一个字典
*args只接受多余的位置参数 一定要放到参数最后
**kwargs只接受多余的关键字参数 一定要放到参数最后
函数参数优先级 位置参数>动态位置参数>默认参数>动态关键字参数
lst = [1,2,3,4,5,7]def func(*args): print(*args) # 打散 输出结果 1 2 3 4 5 7func(*lst) # 函数调用 必须加* 在实参的位置上用*将lst(可迭代对象)按照顺序打散
dic = {"key":1,"key2":2}def func(**kwargs): print(*kwargs) # key key2 获取的是键 一个*只获取键 print(kwargs) #{'key': 1, 'key2': 2} # print(**kwargs) #报错func(**dic) #打散
函数的注释(给别人看的)
def add(a,b):
"""
填写你作什么运算
:param a: a 是什么数据类型
param b: b 是什么数据类型
return:
"""
例子:
# def add(a,b):# """# 数字的加法运算# :param a: int# :param b: int# :return: int# """# return a + b# print(add(1,2))# print(add.__doc__) 查看函数注释 引号之间的内容都能print出来 print(a.__name__) 查看函数名字 add
# print(add())# print(add.__doc__) # 查看函数的注释# print(a.__name__) # 查看函数的名字
函数的名称空间
名称空间:
内置空间: 存放python自带的一些函数
全局空间:当前py文件顶格编写的代码开辟的空间
局部空间:函数开辟的空间
#程序加载顺序:内置空间>全局空间>局部空间
#程序取值顺序:局部空间>全局空间>内置空间
作用域
1.全局作用域:内置+全局 globals() #查看全局作用域
2.局部作用域:局部 locals () #查看当前作用域
a = 10def func(): b = 5 print(locals()) #{'b': 5} 说明b只能作用在函数体内,当作局部变量,全局不能使用 查看的是当前作用域中方法和属性 有b的属性(当前是局部作用域)print(locals()) #结果中有“a”:10 没有b 查看的是当前作用域中方法和属性 有a的属性 说明全局作用域无法使用局部的变量
函数的第一类对象及使用
函数名是一个变量, 但它是一个特殊的变量, 与括号配合可以执行函数的变量
1.函数名可以当作值,赋值给一个变量
示例def func():? print(1)a = funcprint(func) #函数的内存地址print(a) #函数的内存地址
a( ) 执行函数, 因为func赋值给了a, a()跟func()一样,调用函数func()
2.函数名可以当作另一个函数的参数来使用
示例def func(): print(1)def foo(a): #a = func? print(a) #func这个函数的内存地址foo(func)
3.函数名可以当作另一个函数的返回值
示例def func(): print(1111)? return 1 def foo(a):# a= func函数的内存地址? return a #return func函数的内存地址cc = foo(func)print(cc) func函数的内存地址 <function func at 0x0000020BA0A5CD90>cc() 1111 执行func函数了
4.函数名可以当作元素存储在容器中
示例def func(): print(1)def foo(): print(2)def f(): print(3)lst = [func,foo,f]for i in lst: i() #调用i 这个意思是将func foo f 三个函数整体调用 若只是print(i) 得到的是三个函数的内存地址
示例:
def login(): print("登录")def register(): print("注册")def shopping(): print("逛")def add_shopping_car(): print("加")def buy_goods(): print("买")msg ="""1.注册2.登录3.逛4.加5.买请输入您要选择的序号:"""func_dic ={"1":register,"2":login,"3":shopping,"4":add_shopping_car,"5":buy_goods}while True: choose = input(msg) if choose in func_dic: func_dic[choose]() else: print("滚")
函数的嵌套
只要遇见了()就是函数的调用. 如果没有()就不是函数的调用函数的执行顺序def func(): print(1) print("我太难了") print(2) def foo(b): print(3) ss = b() print(ss) print(4) def f(a,b): a(b) f(foo,func) 输出 3 1 我太难了 2 none 4
def func(a,b): def foo(b,a): print(b,a) return foo(a,b) #先执行函数调用a = func(4,7)print(a) 输出结果是4,7 NONE a = func 赋值的是地址,输出地址 a = func() 输出的是return 默认是none
def func(): print(1)def foo(a,b): def f(a,b): print(a,b) func() f(b,a)foo(1,2) 输出2 1 1
def func(a,b): a = a + b b = a + 10 def foo(a,d): def f(e,f): print(f,e) return "我太难了" return f(d,a) # return "我太难了" return foo(b,a) # return "我太难了print(func(2,3)) # print "我太难了"
global
# global只修改全局空间中的变量# 在局部空间中可以使用全局中的变量,但是不能修改,如果要强制修改需要添加global# 当变量在全局存在时global就是申明我要修改全局的变量# 当变量在全局中不存在时global就是申明要在全局创建一个变量
def func(): global a #申明修改的全局变量,如果外层全局没有此变量就是创建 a = 10 b = a + 12 print(b)func() #22print(a) #10 外层print(a) 得到了10,说明global创建了全局变量
nonlocal
# nonlocal: 只修改局部空间中的变量,最外层的一个函数# 只修改离nonlocal最近的一层,如果这一层没有就往上一层查找,只能在局部# nonlocal 不能进行创建
python基础之函数(动态参数,注释,名称空间,第一类对象及使用和函数嵌套)
相关内容
- pycharm默认的模板修改python script,,#!/usr/bin
- (07)-Python3之--函数,,1.定义函数:实现了
- Python的程序结构[3] -> 变量/Variable -> LEGB 法则
- Python面向对象(1)_初步认识,,面向对象面向对象与面
- python 多进程中的p.apply_async(),,最近有接触一点怎么
- Python基础2,,1. if语句1.1
- python之函数(function),,#今天来学习一下函数
- Python 连接 MySQL,,本文转至 余子越的博
- Python匿名函数,,高阶函数可以接收函数
- python\函数2,,一.名称空间与作用域
评论关闭