【学习笔记】--- 老男孩学Python,day10, 函数, 动态参数 命名空间\作用域 global nonlocal
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的更多相关文章
- python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法
python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法 在Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数 ...
- python 全栈开发,Day10(动态参数,命名空间,作用域,函数嵌套)
一.动态参数 def func(a,b,c,d,e,f,g): pass func(1,2,3,4,5,6,7) 如果加30个参数呢?有没有万能的参数,可以代表一切参数呢? *args 动态参数,万能 ...
- python(3)-函数动态参数
先来看一段代码 def show(*arg): print(arg, type(arg)) if __name__ == "__main__": show(1) show(1,2, ...
- python 函数的动态参数 命名空间,作用域以及函数嵌套,global和nonlocal (重点)
*** 坚持坚持,即使你不太强*** 1.函数的动态传参 2.函数的命名空间及作用域 3.函数嵌套 4.global和nonlocal关键字 一.函数的动态传参 1. *args: 位置参数动态传参, ...
- C#学习笔记(十):函数和参数
函数 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syste ...
- Python学习笔记整理(三)Python中的动态类型简介
Python中只有一个赋值模型 一.缺少类型声明语句的情况 在Python中,类型是在运行过程中自动决定的,而不是通过代码声明.这意味着没有必要事声明变量.只要记住,这个概念实质上对变量,对象和它们之 ...
- 跟着太白老师学python day10 函数嵌套, global , nonlocal
函数嵌套: 第一种嵌套方法 def func(): count = 123 def inner(): print(count) inner() func() 第二种嵌套方法 count = 123 d ...
- 《从零开始学Swift》学习笔记(Day 20)——函数中参数的传递引用
原创文章,欢迎转载.转载请注明:关东升的博客 参数的传递引用 类是引用类型,其他的数据类型如整型.浮点型.布尔型.字符.字符串.元组.集合.枚举和结构体全部是值类型. 有的时候就是要将一个值类型参数以 ...
- Python—day10 函数的参数分类
一.实参与形参 1.形参:定义函数,在括号内声明的变量名,用来接受外界传来的值 def fn(形参们): pass def fn(a,b,c):# 形参就是考虑实参的值, ...
随机推荐
- Django 定时任务实现(django-crontab+command)
一.编写自定义django-admin命令 注:利用django-admin自定义命令我们可以ORM框架对model进行操作,如:定时更新数据库,检测数据库状态..... Django为项目中每一个应 ...
- Python os.path.join() 进行路径拼接
在python 项目开发过程中,经常需要将获取到的路径进行拼接, # os.path.join(path1,path2) 将两个路径拼接起来 os.path.join("/usr" ...
- biz_platform项目过程
1.前台界面主要采用React框架.通过Ajax方式将数据与tornado服务器交互.以下代码为请求后台数据. var ThisPage = React.createClass({ render: f ...
- Karatsuba乘法--实现大数相乘
Karatsuba乘法 Karatsuba乘法是一种快速乘法.此算法在1960年由Anatolii Alexeevitch Karatsuba 提出,并于1962年得以发表.此算法主要用于两个大数相乘 ...
- 按照Right-BICEP要求对实验二进行测试
我的代码实现的功能很简单,在最基本的功能上,包括有无括号(0/1),有无负数(0/1),有无乘除法(0/1)验证程序的正确性,测试用例为8个,2^3个,也就覆盖了所有的代码路径. 测试计划: 基本功能 ...
- 四则运算2及psp0设计
随机生成运算式,要求: 1.题目避免重复. 2.可定制(数量/打印方式). 3.可以控制一下参数. 要求:是否有乘除法,是否有括号,数值范围,加减有无负数,除法有无余数. 刚开始看到这样一个题目感觉还 ...
- 分区助手里如何从临近盘(如D盘)抽取一定的空间给已经快满了的盘(如E盘)(博主推荐)(图文详解)
不多说,直接上干货! 分区助手是什么?(博主推荐)(图文详解) 分区助手各版本比较(图文详解) 分区助手官网使用教程(专业版.绿色版和WinPE版)(图文详解) 安装分区助手时出现“分区助手已安装到你 ...
- SPSS学习系列之SPSS Modeler怎么修改默认的内存大小(图文详解)
不多说,直接上干货! 问题来源: 如果你的电脑内存配置比较低的话,会随着数据量增加(尤其是大数据),带不起的情况很有可能发生,会出现一些内存报错... ... 解决办法: 打开“工具”,在modele ...
- 全网最详细使用Scrapy时遇到0: UserWarning: You do not have a working installation of the service_identity module: 'cannot import name 'opentype''. Please install it from ..的问题解决(图文详解)
不多说,直接上干货! 但是在运行爬虫程序的时候报错了,如下: D:\Code\PycharmProfessionalCode\study\python_spider\30HoursGetWebCraw ...
- jdk1.8以前不建议使用其自带的Base64来加解密
JDK1.8之前的base64是内部测试使用的代码,不建议生产环境使用,而且未来可能会移除, JDK1.8提供最新可以正式使用的Base64类, 不要使用JDK中自带的sun.misc.BASE64D ...