1. 动态参数

        位置参数的动态参数: *args        关键字参数的动态参数 : **kwargs        顺序:位置---*args---默认值---**kwargs        在形参上*聚合, **聚合        在实参上*打散, **打散
# 把列表中的每一个元素作为参数, 传递给函数. 一次都传过去

def func(*args, **kwargs):  # *表示聚合,所有的位置参数, 聚合成元组 **聚合成字典
    print(args)
    print(kwargs)
def chi(good_food, bad_food,drink, ice, jiu):
    print("我要吃", good_food, bad_food)

chi("盖浇饭", "辣条")

# 位置参数 > *动态参数 > 默认值参数

def chi( *food, a, b): # 可以传入任意的位置参数
    print("我要吃", food)  # 动态参数接收到的是tuple类型的数据

chi("盖浇饭", "辣条", "面条")
def func(a, b, c, *args, d = 5):
    print(a, b, c, d, args)

func(1,2,3)
func(1,2,3,4,5,6,7, d ="马大哈")

def chi(*food):
    print("我要吃", food)

#  写函数. 给函数传递任意个整数. 返回这些数的和
def he(*n):
    sum = 0
    for e in n:
        sum += e
    return sum
print(he(5))

# 动态接收关键字参数
#  *位置参数
# **关键字参数
def func(**food):   # **food动态接收关键字参数
    print(food) # 接收到的是字典

func(good_food="盖浇饭", bad_food="辣条", drink="冰封")

# 关键字参数一定在位置参数后面
# 位置参数 > *args > 默认值 > **kwargs
#
# 这个函数可以接收所有的参数(无敌的)
def func(*args, **kwargs):
    print(args)
    print(kwargs)
func(1, 2, 5, 6, name="taibai",age=18, sex="不详")

# 把列表中的每一个元素作为参数, 传递给函数. 一次都传过去

def func(*args, **kwargs):  # *表示聚合,所有的位置参数, 聚合成元组 **聚合成字典
    print(args)
    print(kwargs)

# lst = ["马虎疼", "大洋哥", "小花生", "毛尖妹妹"]
# func(*lst)  # 实参, 打散, 迭代产生的

dic = {"name":"太白", "alex":"wuse"}
func(**dic) # 把字典打散. 以key=value形式进行传参

def func(a, b):
    """
    计算a+b的和, 返回一个数
    :param a: 第一个数
    :param b: 第二个数
    :return: 返回计算之后的和
    """
    return a + b
#
# 定义函数
# def 函数名(形参):  1.位置参数, 2, *args, 3.默认值参数, 4. **kwargs
#     函数体   return 返回值
# 函数名(实参)    1. 位置参数. 2.关键字参数. 3. 混合参数,

2. 命名空间和作用域

        命名空间:            1. 内置命名空间: python解释内部运行时的变量函数            2. 全局命名空间: 我们在py文件中直接声明出来的变量,函数            3. 局部命名空间: 在函数内部声明的变量和函数.        作用域:            1.全局作用域:内置+全局            2.局部作用域:局部          globals() 查看全局作用域中的名字          locals() 查看当前作用域中的名字
a = "   # 全局
b = 36  # 全局
def func(): # 全局
    c = "马化腾"   # 局部

def func2():
    print(c)

a = 10
def func():
    a = 20
    print(a)    # 就近原则
    print(globals())  # globals() 获取到全局作用域(内置,全局)中的所有名字
    print(locals())  # locals() 查看当前作用域中的所有名字
func()
3. global和nonlocal

        global: 把全局变量拿到局部来用.        nonlocal: 把离他最近的一层的变量拿过来.不会找全局
def func():
    global a    # a 不再是局部变量. 是全局变量
    a = 30  # 把全局中的a重新赋值成30
    print(a)
func()
print(a)

a = 10
def func1():

    def func2():
        nonlocal a  # 找局部作用域中 离他最近的那个变量引入进来
        a = 20
        print(a)
    func2()
    print(a)
func1()

a = 1
def fun_1():
    a = 2
    def fun_2():
         def fun_3():
             nonlocal a
             a =  4
             print(a)
         print(a)
         fun_3()
         print(a)
    print(a)
    fun_2()
    print(a)
print(a)
fun_1()
print(a)

【学习笔记】--- 老男孩学Python,day10, 函数, 动态参数 命名空间\作用域 global nonlocal的更多相关文章

  1. python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法

    python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法 在Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数 ...

  2. python 全栈开发,Day10(动态参数,命名空间,作用域,函数嵌套)

    一.动态参数 def func(a,b,c,d,e,f,g): pass func(1,2,3,4,5,6,7) 如果加30个参数呢?有没有万能的参数,可以代表一切参数呢? *args 动态参数,万能 ...

  3. python(3)-函数动态参数

    先来看一段代码 def show(*arg): print(arg, type(arg)) if __name__ == "__main__": show(1) show(1,2, ...

  4. python 函数的动态参数 命名空间,作用域以及函数嵌套,global和nonlocal (重点)

    *** 坚持坚持,即使你不太强*** 1.函数的动态传参 2.函数的命名空间及作用域 3.函数嵌套 4.global和nonlocal关键字 一.函数的动态传参 1. *args: 位置参数动态传参, ...

  5. C#学习笔记(十):函数和参数

    函数 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syste ...

  6. Python学习笔记整理(三)Python中的动态类型简介

    Python中只有一个赋值模型 一.缺少类型声明语句的情况 在Python中,类型是在运行过程中自动决定的,而不是通过代码声明.这意味着没有必要事声明变量.只要记住,这个概念实质上对变量,对象和它们之 ...

  7. 跟着太白老师学python day10 函数嵌套, global , nonlocal

    函数嵌套: 第一种嵌套方法 def func(): count = 123 def inner(): print(count) inner() func() 第二种嵌套方法 count = 123 d ...

  8. 《从零开始学Swift》学习笔记(Day 20)——函数中参数的传递引用

    原创文章,欢迎转载.转载请注明:关东升的博客 参数的传递引用 类是引用类型,其他的数据类型如整型.浮点型.布尔型.字符.字符串.元组.集合.枚举和结构体全部是值类型. 有的时候就是要将一个值类型参数以 ...

  9. Python—day10 函数的参数分类

    一.实参与形参 1.形参:定义函数,在括号内声明的变量名,用来接受外界传来的值 def fn(形参们):                pass def fn(a,b,c):# 形参就是考虑实参的值, ...

随机推荐

  1. IntelliJ IDEA优秀插件(编程通用)

    一.IntelliJ IDEA开发 最近大部分开发IDE工具都切换到了,所以也花了点心思去找了相关的插件.这里整理的适合各种语言开发的通用插件,也排除掉IntelliJ IDEA自带的常用插件了(有些 ...

  2. [bug] JS sort 函数在 ios 中无效

    首先,请原谅我做一次标题党: 但我觉得从发现问题到最后解决问题的过程还是蛮有意思的,特此记录一下: 背景 近两天开发的航班延误宝是内嵌在客户端(android.ios)webview 中的 H5 页面 ...

  3. ReentrantLock锁的释放

    一:代码 reentrantLock.unlock(); 虽然只有一句,但是源码却比较多: public final boolean release(int arg) { if (tryRelease ...

  4. 非常好用的@ResponseBody注解

    AJAX的写法: ajax接收json格式: ①如果ajax接收的是text dataType:"text", var json = eval("(" + da ...

  5. 解决chrome无法启用印象笔记-剪藏功能

        新版Chrome浏览器安全的问题,导致从印象笔记官网下载的rxs(crx)文件无法直接通过drap&drop功能添加功能块.可以将rxs(crx)文件后缀名改成rar格式,然后解压,通 ...

  6. 自定义android ProgressDialog

    Android系统自己提供的UI的都是比较难看的,开发中经常用到自定义对话框,下面分享个最近项目中使用的加载框.   下面是源代码,主要的原理就是准备几个图片,然后循环播放. MainActivity ...

  7. Python小白学习之路(十八)—【内置函数三】

    一.对象操作 help() 功能:返回目标对象的帮助信息 举例: print(help(input)) #执行结果 Help on built-in function input in module ...

  8. 原生Js弹窗插件|web弹出层组件|对话框

    wcPop.js 是一款基于原生javascript开发的前端 web版 弹窗组件,遵循原生 H5/css3/JS 的书写规范,简单实用.拿来即用(压缩后仅10KB).已经兼容各大主流浏览器.内含多种 ...

  9. Linux实用指令

    Linux实用指令 Rpm&Yum ​ 一种用于互联网下载包的打包和安装工具,它包含某些Linux分发版中,它生产具有 .rpm 扩展名的文件.RPM 是 RedHat Package Man ...

  10. Maven与Hudson集成

    Hudson是一款优秀的持续集成产品,本文阐述Maven于Hudson的集成   Hudson的下载和安装 Hudson有两种安装模式,1:自运行(Hudson内建netty容器),2:放到如tomc ...