Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法

内容大纲

1.函数的动态参数

2.函数的注释

3.名称空间

4.函数的嵌套

5.global以及nolocal的用法

1.函数的动态参数

# def func(a,b=1):
# print(a,b)
#
# func(1) def func(a,b,*args):
print(a,b,args) # * 聚合
print(a,b,*args) # * 打散
func(1,2,3,4,5,6,7,8,9,0)
*args 是万能(接受任意多个)的位置参数 在函数定义的时候叫做聚合 # def func(a,b,*args):
# *args 是万能(接受任意多个)的位置参数 *在函数定义的时候叫做聚合
#
# func(1,2,3,4,5,6,7,8,9,0)
位置参数 > 动态位置参数 > 默认参数 # def func(*args,a=1,b=2):
# print(a,b,args) # 元组(接受的位置参数)
# func(12,15,16,19,10) # def func(a,b,**kwargs):
# print(a,b,kwargs) # 字典(接受的关键字的参数)
# func(1,2,c=1,d=2) # def func(a,b,*args,c=1,d=2):
# print(a,b,*args,c,d)
# func(1,2,3,4) def func(a,b,*args,c=1,d=2,**kwargs):
print(a,b,*args,c,d,kwargs)
*kwargs -- 获取到的字典的键
# func(1,2,3,4,c=8,d=10,e="alex",f="wusir") def func(*agrs,**kwargs): # 万能传参
print(agrs,kwargs)
func(1,2,3,4,5,6,7,8,a=1,b=2,c=3) 参数的优先级: 位置参数 > 动态位置参数 > 默认参数(关键字参数) > 动态关键字参数
1.万能传参: 动态位置参数,动态关键字参数 (最常用******)
2.位置参数,动态位置参数
3 动态位置参数,关键字参数,动态关键字参数

2.函数的注释

写好函数的定义后,换行,三个双引号回车自动弹出所需注释的内容
每次写函数需要写注释
函数名__doc__
# def func(a,b):
# """
# 逻辑判断...
# :param a: str
# :param b: int
# :return: bool
# """
# print(a,b) # def func1(user,password):
# """
# 密码加密
# :param user: 用户名 str
# :param password: 密码 str
# :return: 加密的密码 MD5
# """
# print(user,password) # print(func.__doc__)
print(func1.__doc__)
print(func.__name__)

3.名称空间

# print(11)
# a = 10
#
# def func():
# b = 20
# print(b) 内置空间 : Python解释器自带的,print input len
全局空间 : 当前py文件需要开辟的空间存放在全局空间
局部空间 : 函数中开辟的空间就是局部空间 加载顺序:
# 内置空间 > 全局空间 > 局部空间 取值顺序:
# 局部空间 > 全局空间 > 内置空间(找不到就报错了!) 作用域:
# 全局作用域: 内置空间 + 全局空间
# 局部作用域: 局部空间

4.函数的嵌套

# def func():
# print(1)
# def f1():
# print(2)
# return f1()
# func()
#结果:1 2
# def func():
# print(1)
# def f1():
# print(2)
# return func()
# func()
#结果:无限循环1 不管在什么位置,只要是函数名+() 就是在调用此函数
函数调用执行后,函数体中开辟的空间就自动销毁了 # def func():
# a = 1
# def foo():
# b = 2
# print(b) # 2
# print(a) # 1
# def f1():
# print(b) # 2
# return f1()
# return foo()
# print(func())
#2
#1
#2
#None # 函数互相引用 # def func():
# a = 1
# foo()
# print(a)
#
# def foo():
# b = 2
# print(b)
# func()
#结果:
#2
#1 # def a():
# a1 = 1
# c()
# print(c)
# def b():
# b1 = 2
# print(b1)
# def c():
# c1 = 3
# print(a)
# def run():
# a()
# run()
#结果:返回是a,c的地址
#<function a at 0x000000141BA21E18>
#<function c at 0x000000141D93AA60>

# def func():
# a = 1
# def b():
# print(a)
#
# def foo():
# b = 1
# def z():
# print(func)
# print(b)
# ret = z()
# func()
# return ret
#
# def run():
# foo()
# print(run())
#结果:
#<function func at 0x00000012E4CE1E18>
#1
#None
切记返回值,不写的时候默认返回None # def func(a):
# foo(a) #10
# def foo(e):
# b(e) # return 10
# def b(c):
# print(c)
# return 10
# print(func(5))
#结果:
#5
#None
由于中间没有return,所以在返回的途中断掉传送

5.global及nolocal的用法

# def func():
# global a
声明修改全局变量的值
只会改变全局变量的值
# a += 1
# print(a)
# func()
# print(a) # a = 10
# def f1():
# a = 10
# def f2():
# a = 15
# def f3():
# global a
# a += 1
# print(a) # 11
# print(a) # 15
# f3()
# print(a) # 10
# f2()
# f1()
#结果:
#10
#15
#11

# a = 10
# def func():
# def f1():
# global a
# a += 1
# def foo():
# nonlocal a
# a += 1
# print(a) # 31
# foo()
# print(a) # 31
# f1()
# func()
# print(a) # 10 global : 修改全局空间的变量对应的值
nonlocal :在外层的函数中,修改局部空间的变量值.完全不涉及全局变量,
只修改离它最近的一层,最近的一层没有变量继续向上找,直到找到最外层函数 nolocal例子:
a = 1
def fun_1():
a = 2
def fun_2():
nonlocal a
a = 3
def fun_3():
a = 4
print(a)
print(a)
fun_3()
print(a)
print(a)
fun_2()
print(a)
print(a)
fun_1()
print(a)
结果:
1
2
3
4
3
3
1

6.今日总结

# 1.函数的动态参数
# *args,**kwargs (能够接受动态的位置参数和动态的关键字参数)
# 定义阶段(*args,**kwargs) 聚合
# *args - tuple
# **kwargs -- dict
# 使用阶段*args,*kwargs 打散
# *args - 源数据类型
# *kwargs - 打散是字典的键
# 优先级: 位置 > 动态位置> 默认 > 动态关键字 # lst = [12,23,3,4,5,6]
# def func(*args):
# print(*args)
# func(lst[0],lst[1]) # 笨的办法
# func(*lst) # dic = {"key":1,"key1":34}
# def func(**kwargs):
# print(kwargs)
# func(**dic) # 2.函数的注释
"""
每次写函数的时候需要写注释
函数名.__doc__
""" # 3.名称空间
# 内置空间: python解释器自带的
# 全局空间:当前文件(.py文件)
# 局部空间:函数体开辟的空间 # 加载顺序: 内置 > 全局> 局部
# 取值顺序: 局部 > 全局 > 内置 # 作用域:
# 全局作用域 内置 + 全局
# 局部作用域: 局部 # 4.函数嵌套
# 函数中套函数
# 函数嵌套调用
# 函数嵌套参数的传递
# 函数嵌套返回值的传递 # 5.global nonlocal
# global : 修改全局空间的变量对应的值
# nonlocal :在外层的函数中,修改局部空间的变量值.完全不涉及全局变量,
# 只修改离它最近的一层,最近的一层没有变量继续向上找,直到找到最外层函数 # 6.三元运算符
# a = 10
# b = 20
# c = a if a> b else b
# 变量名 = 条件成立的结果 条件 条件不成立的结果

Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法的更多相关文章

  1. 动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结

    03,动态参数 *args,**kwargs # 用户传入到函数中的实参数量不定时,或者是为了以后拓展,# 此时要用到动态参数*args,**kwargs(万能参数.)# *args接收的是所有的位置 ...

  2. python--函数的返回值、函数参数的使用、名称空间与作用域、函数嵌套、函数对象

    今天学习内容有函数的返回值.函数参数的使用.名称空间与作用域.函数嵌套. 下来我们一一查看. 函数的返回值 看几个栗子: def func(x): y=func() print(y) def foo( ...

  3. 函数的名称空间,函数的嵌套(global, nonlocal),函数名的运用

    一 函数的名称空间 内置空间:存放python解释器内置函数的空间 全局空间:py文件运行时开辟的,存放的是执行的py文件(出去函数内部)的所有的变量与值的对用关系,整个py文件结束后才会消失. 局部 ...

  4. python基础知识-day8(动态参数)

    1.动态参数 函数的形式参数个数不确定.函数的形式数据类型不确定,使用动态参数,*代表元组,**代表字典. 2.代码案例演示 1 def func(*args,**kwargs): 2 print(a ...

  5. CSIC_716_20191111【函数对象、名称空间、作用域、global 和nonlocal】

    函数名是可以被引用,传递的是函数的内存地址.函数名赋值给变量后,只需要在变量后加上括号即可调用函数. 名称空间 内置名称空间:在python解释器中提前定义完的名字 全局名称空间:if.while.f ...

  6. python 之 面向对象基础(定义类、创建对象,名称空间)

    第七章面向对象 1.面向过程编程 核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么 基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式 优点:复杂的问 ...

  7. 百万年薪python之路 -- 函数的动态参数

    1.函数的动态参数 1.1 动态接收位置参数 在参数位置用*表示接受任意参数 def eat(*args): print('我想吃',args) eat('蒸羊羔','蒸熊掌','蒸鹿尾儿','烧花鸭 ...

  8. 函数动态参数和Python中的三种空间

    动态参数 : *args 实参角度: 定义一个函数时, * 将所有的位置参数聚合到一个元祖中 顺序 : 位置参数 > * args > 默认参数 > **kwargs 接受所有参数 ...

  9. 第5章函数进阶 第5.1节 Python函数的位置参数、关键字参数精讲

    前面第二章简单介绍了函数定义的语法,经过后面一系列的学习,函数有必要再次介绍一下相关内容. 一.    关于函数的语法 1.    语法 def 函数名([参数]): 函数文档字符串 函数体      ...

随机推荐

  1. Java——几点重要知识笔记(一)

    学了Java有一段时间了,自认为有一些基础知识比较重要,因此记下来共享,不喜勿喷. 一.标识符 (1)定义:在Java语言中,凡是对类,方法,变量,包,参数等命名时,所使用的字符序列 (2)包含的内容 ...

  2. Microsoft SQL Server Migration Assistant for MySQL(从MySQL迁移表数据到MSSQL2008R2)_3

    环境: 英文版(Windows7 64 bit + MySQL8.0.18 64 bit + MSSQL2008R2 64 bit)                           Microso ...

  3. [每日一题2020.06.08]洛谷P1605 DFS

    今天cf又杯具的只写出2题, 虽然AB题20分钟左右就搞定了, 但是CD写了2个小时也没写出来 D题我用到了DFS, 虽然必不正确, 但是我至少发现了一个问题, 那就是我连DFS都忘了, 于是怒找DF ...

  4. Hadoop + Hive + HBase + Kylin伪分布式安装

    问题导读 1. Centos7如何安装配置? 2. linux网络配置如何进行? 3. linux环境下java 如何安装? 4. linux环境下SSH免密码登录如何配置? 5. linux环境下H ...

  5. macos的两个快捷键和一个小tip

    学校的linux协会介绍了一个免费的light轻量级加速器,昨天晚上十点左右的时候着手研究,发现其实就是一个代理服务器.在配置这个代理服务器的时候碰到了一些困难并最终都解决了.下面记录一下配置过程学到 ...

  6. PageHelper支持GreenPlum

    greenplum是pivotal在postgresql的基础上修改的一个数据库,语法和postgresql通用.使用PageHelper做分页插件的时候,发现目前没有针对greenplum做支持,但 ...

  7. 微信小程序-工具的下载与安装

    QQ讨论群:785071190 安装开发工具 前往 开发者工具下载页面 ,根据自己的操作系统下载对应的安装包进行安装,有关开发者工具更详细的介绍可以查看 <开发者工具介绍> .工具安装非常 ...

  8. android中使用https是否对服务证书合法性校验的新的体会

    package com.cetcs.logreport.utils; import android.content.Context; import org.apache.http.conn.ssl.S ...

  9. [区间+线性dp]数字游戏

    题目描述 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易.游戏是这样的,在你面前有一圈整数(一共\(n\)个),你要按顺 ...

  10. Laytpl 1.2

    https://jeesite.gitee.io/front/laytpl/index.html