一、函数参数-动态传参
 
    1、形参:
 
      *   在形参位置, 表示此参数为不定参数,接受的是位置参数
           并且接收到的位置参数的动态传参都是元组

def func(* jiemu): # 在形参这里把接受过来的实参进行聚合,集合成一个元组
print(jiemu) func('奇葩说','知识就是力量','老梁说故事','吐槽大会') # 结果:('奇葩说', '知识就是力量', '老梁说故事', '吐槽大会')
 **   在形参表示动态传参 -- 关键字参数
            关键字动态参数,接收到的是字典
def func(**tianqi): # 聚合, ** 聚合成字典
print(tianqi) # func(1,2,3,4,5) # 位置参数或报错, func() takes 0 positional arguments but 5 were given
func(today='晴天', tomorrow='大晴天', yesterday='阴天')
# 结果:{'today': '晴天', 'tomorrow': '大晴天', 'yesterday': '阴天'}
顺序
 
位置   *args   默认值   **kwargs      ,可以随意搭配,必须按照顺序来
# 无敌参数
def func(*args,**kwargs): # argument 参数 key argument 关键字参数
print(args,kwargs) func('a','b',1,2,3,f='小熊',g = '小虎') # 结果:('a', 'b', 1, 2, 3) {'f': '小熊', 'g': '小虎'}
2、实参 
 
   *   在实参是打散,把列表,元组,字符串打散成位置参数进行传递

def eat(*food):
print(food) eat(*"你今天吃了什么") # 结果:('你', '今', '天', '吃', '了', '什', '么')

**  在形参表示动态传参 -- 关键字参数; 打散,打散成关键字

def tianqi(**day):  # 聚合,聚合字典
print(day) dic = {'today':'晴天','tomorrow':'要下雪',} # 打散,打散关键字
tianqi(**dic,abs= '还是要下雪') # 结果:{'today': '晴天', 'tomorrow': '要下雪', 'abs': '还是要下雪'}
二、作用域和名称空间
 
     1、名称空间:用来存放名字(变量,函数名,类名,引入的模块名)
 
        1、全局名称空间:我们在py文件中自己写的变量,函数,类,
        2、内置名称空间:我们python解释器提供好的一些内置内容(print,imput,list,tuple,str,int...)
        3、局部名称空间:在函数中声明的变量会放在局部命名空间
            
        名称空间可能会有无数个,和局部名称空间是相对独立的,一般互不干扰
 
         加载顺序:1、内置命名空间  2、全局命名空间 3、局部命名空间(函数被调用的时候)
         取值顺序:1、局部命名  2、全局命名空间  3、内置命名空间
 
        从全局中去找局部  -》找不到
        从局部去找全局 -》 可以找到
        
        2、作用域
 
            作用域就是作用范围,按照生效范围来看分为全局作用域和局部作用域
 
            1、全局作用域:包含内置命名空间和全局命名空间,在整个文件的任何位置都可以使用
            2、局部作用域:局部命名空间,在函数内部使用
 
              通过 globals()函数来查看全局作用域中的内容,也可以通过locals()来查看局部作用域中的变量和函数信息

a = 10
def func():
a = 20
c = 30
def abc():
print('who are you?')
print(a,c) # 这里使用的是局部作用域
print(globals()) # 打印全局作用域中的内容
print(locals()) # 打印局部作用域中的内容 func()

三、函数的嵌套

def func1():
print(1)
def func2():
print(2)
def func3():
print(3)
func3()
print(4)
func2()
print(5) func1()

四、关键字global和nonlocal

a = 10
def func2():
a = 20
print('内部的:',a) func2()
print('外部的:',a) # 内部的: 20
# 外部的: 10

global表示,不再使用局部作用域中的内容了,而改用全局作用域中的变量

# 全局变量一般是不能随意改变得
a = 10
def func2():
# 慎用
global a # 表示从全局把一个变量引到局部,后面使用的a都是全局变量
a += 20 # 现在a 是全局变量,在试图改全局变量
print('内部的:',a) func2()
print('外部的:',a) # 内部的: 30
# 外部的: 30

  在局部引入一个全局变量,如果这个变量在全局不存在,global会自动创建一个全局变量

def func():
global a # 创建一个全局变量
a = 10
print(a)
func()
print(a)

nonlocal 表示在局部作用域中,调用父级命名空间(离它最近的一个)中的变量

python -- 函数进阶的更多相关文章

  1. python函数进阶(函数参数、返回值、递归函数)

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值,可以 相互组合,一共有 4 种 组合形 ...

  2. 第六篇:Python函数进阶篇

    在了解完了 Python函数基础篇之后,本篇的存在其实是为了整合知识,由于该篇的知识是否杂乱,故大家可以通过点开点连接直接进入其详细介绍,该篇主要大致的介绍一下几个知识点:  一.Python的迭代器 ...

  3. python 函数进阶与闭包

    函数的命名空间和作用域 引言 现在有个问题,函数里面的变量,在函数外面能直接引用么? def func1(): m = 1 print(m) print(m) #这行报的错 报错了: NameErro ...

  4. 万恶之源 - Python函数进阶

    函数参数-动态参数 之前我们说过传参,如果我们在传参数的时候不很清楚有哪些的时候,或者说给一个函数传了很多参数,我们就要写很多,很麻烦怎么办呢,我们可以考虑使用动态参数 形参的第三种:动态参数 动态参 ...

  5. python函数进阶

    知识内容: 1.函数即变量 2.嵌套函数 3.lambda表达式与匿名函数 4.递归函数 5.函数式编程简介 6.高阶函数与闭包 一.函数即变量 1.变量的本质 声明一个变量,在python里本质上讲 ...

  6. Python 函数进阶(filter/map/json/zip)

    一.函数即变量 def say(name): print(name)ybq = say #可以被赋值给其他变量ybq('Amily') #调用函数 函数名:say 函数体:第1-2行 返回值:retu ...

  7. 13 Python 函数进阶

    代码在运行伊始,创建的存储“变量名与值的关系”的空间叫做全局命名空间,在函数的运行中开辟的临时的空间叫做局部命名空间 命名空间和作用域 命名空间的本质:存放名字与值的绑定关系 >>> ...

  8. Python—函数进阶篇

    lambda表达式(匿名函数表达式) 作用:创建一个匿名函数对象.同def类似,但不提供函数名. 语法:lambda [形参1,形参2,...] : 表达式 语法说明 lambda 只是一个表达式,它 ...

  9. Python函数进阶:闭包、装饰器、生成器、协程

    返回目录 本篇索引 (1)闭包 (2)装饰器 (3)生成器 (4)协程 (1)闭包 闭包(closure)是很多现代编程语言都有的特点,像C++.Java.JavaScript等都实现或部分实现了闭包 ...

随机推荐

  1. 分享一个基于ssm框架下的webService接口开发

    首先肯定是导入相关jar包 cxf-core-3.1.9.jar cxf-rt-bindings-soap-3.1.9.jar cxf-rt-bindings-xml-3.1.9.jar cxf-rt ...

  2. Python基础_列表 list

    列表是Python的一种基础数据类型,可以进行的操作包括索引,切片,加,乘,检查成员 列表定义: list(列表.数组) eg:stus=['lisi','jion','peter'] #下标:即角标 ...

  3. JavaScript 中的 FileReader

    在不经过服务器的时候,本地预览照片,当确定以后再上传 它是H5提供的构造函数 用法: <input type='file'> <img src='' alt=''> <s ...

  4. Django 安装 创建项目

    安装Django: 安装好python 2.7 or 3.5(备注:在环境变量添加C:\Python36\Scripts路径) 然后在cmd窗口使用命令pip,有说明信息则表示pip可以正常使用. 安 ...

  5. HTML有哪些标签?html常用标签大全

    html中标签有很多,每一种标签都有着不同的用处,下面这篇文章php中文网给大家总结html常用的标签,每一种标签都会跟随一个例子,话不多说,让我们来看看具体内容.<font>字体标签,用 ...

  6. 关于matplotlib绘制直方图偏移的问题

    在使用pyplot绘制直方图的时候我发现了一个问题,在给函数.hist()传参的时候,如果传入的组数不是刚刚好(就是说这个组数如果是使用(最大值-最小值)/组距计算出来,而这个数字不是整除得来而是取整 ...

  7. MyBatis Generator 自定义生成注释

    注释生成器 为了生成db里面的注释,必须自定义注释生成器 EmptyCommentGenerator: import org.mybatis.generator.api.CommentGenerato ...

  8. BZOJ-1587|前缀和 预处理 dp||叶子合并leaves

    叶子合并leaves Description 在一个美丽的秋天,丽丽每天都经过的花园小巷落满了树叶,她决定把树叶堆成K堆,小巷是笔直的 共有N片树叶(树叶排列也是笔直的),每片树叶都有一个重量值,并且 ...

  9. scss、sass、less的对比与区别

    什么是Sass和Less? sass和less都属于CSS预处理器. css预处理定义了一种新的语言,其基本思想是,用一种专门的编程语言,为css增加了一些编程的特性,将CSS作为目标生成文件,然后开 ...

  10. IntelliJ IDEA 和 Pycharm 破解

    关键网址:http://idea.lanyus.com/ 步骤: 1. 在http://idea.lanyus.com/上下载:JetbrainsCrack-2.9-release-enc.jar . ...