10.Python初窥门径(函数进阶)
时间:2019-06-18
本文章向大家介绍10.Python初窥门径(函数进阶),主要包括10.Python初窥门径(函数进阶)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Python(函数进阶)
一、函数的传参(接上期)
形参角度(一共四种,后两种)
动态参数(万能参数)*
# 定义一个函数时,*所有的位置参数聚合到一个元组中 def func(*args): # *args这里是一个元组 print(f"名门正派都有:{arg}") func("少林","武当","峨眉") # 名门正派都有:("少林","武当","峨眉") --------------------------------- # 定义一个函数时,**所有的关键字参数聚合到一个字典中 def func(**kwargs): # **kwargs这里是一个字典 print(kwargs) func(name="陈",age=25,hobby="跑步") # {name:"陈",age:25,hobby:"跑步"} --------------------------------- # *和**可同时使用 def func(*args,**kwargs): print(args) # ('少林', '武当', '峨眉') print(kwargs) # {'name': '陈', 'age': 25, 'hobby': '跑步'} func("少林","武当","峨眉",name="陈",age=25,hobby="跑步")
动态参数*特殊用法
# 函数内*用法 def func(*args): # *args这里是一个元组 print(args) lis1=["少林","武当","峨眉"] lis2=["极乐谷","魔教"] func(*lis1,*lis2) # ("少林","武当","峨眉","极乐谷","魔教") # 当函数的执行时,*iterable代表打散 --------------------------------- def func(**kwargs): # **kwargs这里是一个字典 print(kwargs) dic1={name:"陈",age:25,hobby:"跑步"} dic2={name:"王",age:27,hobby:"游戏"} func(**dic1,**dic2) # {name:"陈",age:25,hobby:"跑步",name:"王",age:27,hobby:"游戏"} # **dict代表打散,此方式只能打散字典
#函数外*用法 a,b,*c=[1,2,3,4,5,6,7] print(a,b,c) # 1,2,[3,4,5,6,7] # 在函数外*用于处理剩余元素,以列表的形式将剩余元素整合在一起
形参角度的最终顺序
- args不能放在位置参数前面
- args不能放在默认参数后面
- **kwargs不能放在默认参数前面
def func(a,b,*args,sex="man",**kwargs):
仅限关键字参数(了解即可)
# 在形参中以位置参数形式存在关键字参数与**kwargs之间,但是实参必须使用关键词方式传参.
def func(a,b,*args,sex="man",c,**kwargs):
print(a,b,args,sex,c,kwargs)
func(1,2,3,4,5,c=[6,7],name="陈",age=25)
# 执行结果 : 1 2 (3, 4, 5) man [6, 7] {'name': '陈', 'age': 25}
二、从空间角度研究函数
- 全局名称(命名)空间 : py文件运行时开辟的,存放的是执行的py文件(出去函数内部)的所有的变量(地址)的对应关系,整个py文件结束才会消失.
- 临时(局部)名称空间 : 函数执行时,在内存中临时开辟一个空间,存放的函数中的变量
- 内置名称空间 : 存放python解释器为我们提供的名字, list, tuple, str, int这些都是内置命名空间
三、取值顺序加载顺序
- 加载顺序 : 内置名称空间>>全局名称空间>>(当函数执行时)局部名称空间
- 取值顺序 : 满足就近原则,单项不可逆.
- 在全局中寻找时,全局名称空间>>内置名称空间
- 在局部中寻找时,局部名称空间>>全局名称空间>>内置名称空间
四、作用域与内置函数
- 全局作用域 : 全局名称空间+内置名称空间
- 局部作用域 : 局部名称空间
内置函数 : globals,locals
globals() # 以字典的形式返回全局作用域所有的变量对应关系
locals() # 以字典的形式返回当前作用域的变量的对应关系
# 在全局作用域下打印,则他们获取的都是全局作用域的所有的内容。 a = 2 b = 3 print(globals()) print(locals()) ''' {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001806E50C0B8>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/lnh.python/py project/teaching_show/day09~day15/function.py', '__cached__': None, 'a': 2, 'b': 3} ''' --------------------------------- # 在局部作用域中打印。 a = 2 b = 3 def foo(): c = 3 print(globals()) # 和上面一样,还是全局作用域的内容 print(locals()) # {'c': 3} foo()
五、高阶函数(嵌套函数)
# 实例1:
def func1():
print('in func1')
print(3)
def func2():
print('in func2')
print(4)
func1() # in func1 3
print(1) # 1
func2() # in func2 4
print(2) # 2
---------------------------------
# 例2:
def func1():
print('in func1')
print(3)
def func2():
print('in func2')
func1()
print(4)
print(1) # 1
func2() # in func2 in func1 3 4
print(2) # 2
---------------------------------
# 例3:
def fun2():
print(2)
def fun3():
print(6)
print(4)
fun3()
print(8)
print(3) # 3
fun2() # 2 4 6 8
print(5) # 5
原文地址:https://www.cnblogs.com/chenshuo531702820/p/11044923.html
- Vjios P1736 铺地毯【暴力,思维】
- Vijos P1116 一元三次方程求解【多解,暴力,二分】
- Python Selenium设计模式-POM
- [快学Python3]HTTP处理 - urllib模块
- Vijos P1786 质因数分解【暴力】
- 模仿百度新闻列表底部的“加载更多”
- Vijos P1035 贪婪的送礼者【模拟】
- Vijos P1114 FBI树【DFS模拟,二叉树入门】
- Vijos P1448 校门外的树【多解,线段树,树状数组,括号序列法+暴力优化】
- 撞库扫号防范
- 分享一个 HTTPS A+ 的 nginx 配置
- Vijos P1785 同学排序【模拟】
- Vijos P1784 数字统计【模拟】
- 网络安全黑暗森林法则:2015 ISC 深度回顾
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法