Python语言之讲解函数进阶
从安 2019-06-19 来源 : 阅读 949 评论 0

摘要:本篇文章主要讲述Python语言之讲解函数进阶,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇文章主要讲述Python语言之讲解函数进阶,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

Python语言之讲解函数进阶

一、函数的传参

形参角度(一共四种,后两种)

 

1.动态参数(万能参数)*

 

# 定义一个函数时,*所有的位置参数聚合到一个元组中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):

 

2.仅限关键字参数(了解即可)

 

# 在形参中以位置参数形式存在关键字参数与**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}


二、从空间角度研究函数

1. 全局名称(命名)空间 : py文件运行时开辟的,存放的是执行的py文件(出去函数内部)的所有的变量(地址)的对应关系,整个py文件结束才会消失.

2. 临时(局部)名称空间 : 函数执行时,在内存中临时开辟一个空间,存放的函数中的变量

3. 内置名称空间 : 存放python解释器为我们提供的名字, list, tuple, str, int这些都是内置命名空间


三、取值顺序加载顺序

1. 加载顺序 : 内置名称空间>>全局名称空间>>(当函数执行时)局部名称空间

2. 取值顺序 : 满足就近原则,单项不可逆.

在全局中寻找时,全局名称空间>>内置名称空间

在局部中寻找时,局部名称空间>>全局名称空间>>内置名称空间


四、作用域与内置函数

1. 全局作用域 : 全局名称空间+内置名称空间

2. 局部作用域 : 局部名称空间

3. 

内置函数 : 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 = 3def 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

 

本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @从安 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程