python中的参数、全局变量及局部变量
1.位置参数、关键字参数、默认参数的使用
- 位置参数、关键字参数
def test(x,y,z):
print(x)
print(y)
print(z)
test(1,2,3)
#位置参数,必须一一对应,缺一不行多一也不行
test(y=2,x=5,z=4)
#关键字参数,无须一一对应,缺一不行多一也不行
*位置参数必须在关键字参数左边
# test(1,y=2,3)#报错
# test(1,3,y=2)#报错
# test(1,3,z=2,y=4)#报错
# test(z=2,1,3)#报错
# test(1,3,z=2)#True,一个参数不可多次赋值
- 默认参数
def test(x,type='sb'):
print(x)
print(type)
test('laowang')
#结果:laowang
# sb
2.参数组
- *列表、元组
def test(x,*args):
print(x)
print(args)
test(1)
#结果:1
# ()
test(1,2,3,4,5)
#结果:1
# (2, 3, 4, 5)
test(1,{'name':'alex'})
#结果:1
# ({'name': 'alex'},)
test(1,['x','y','z'])
#结果:1
# (['x', 'y', 'z'],)
'''*可把参数组遍历出来'''
test(1,*['x','y','z'])
#结果:1
# ('x', 'y', 'z')
test(1,*('x','y','z'))
#结果:1
# ('x', 'y', 'z')
- **字典
def test(x,**kwargs):
print(x)
print(kwargs)
test(1,y=2,z=3)
#结果:1
# {'y': 2, 'z': 3}
test(1,**{'a':4,'w':6})
#结果:1
# {'a': 4, 'w': 6}
def test(x,*args,**kwargs):
print(x)
print(args,args[-1])
print(kwargs,kwargs.get('y'))
test(1,1,2,1,1,11,1,x=1,y=2,z=3)
#报错
还是前面说的,参数不可多次被赋值,最前面的位置参数1已经将形参中的x赋值了,后面又有一个位置参数x=1,想要再次将形参x赋值,所以会报错。
改正如下:
将位置参数删掉或者换一个不和形参冲突的
test(1,1,2,1,1,11,1,y=2,z=3)
#结果:1
# (1, 2, 1, 1, 11, 1) 1
# {'y': 2, 'z': 3} 2
3.全局变量和局部变量
通常全局变量变量名大写,局部变量变量名小写
*******************************************************************global*******************************************************************
- 全局变量(不在函数内,顶格无缩进)
********************如果函数的内容无global关键字:全局变量只限访问,不能修改
name='dsy'
def change_name():
name='太帅了'
change_name()
print(name)
#结果:dsy
********************如果函数的内容有global关键字:全局变量可以被修改
name='dsy'
def change_name():
global name
name='太帅了'
change_name()
print(name)
#结果:太帅了
- 局部变量(不顶格,有缩进)
name='dsy'
def change_name():
name='太帅了'
print(name)
change_name()
#结果:太帅了
name='dsy'
def change_name():
print(name)
change_name()
#结果:dsy
在一个函数内执行某段程序,优先读取局部变量,如果没有局部变量,再读取全局变量,局部变量无法对全局变量进行覆盖、更改、替换。
*******************************************************************nonlocal*******************************************************************
name = "老段"
def laowang():
name = "老陈"
def laoli():
nonlocal name # nonlocal,指定上一级变量,如果没有就继续往上直到找到为止
name = "老李"
laoli()
print(name)
print(name)
laowang()
print(name)
#结果:老段
# 老李
# 老段
总结:在一个函数内打印一个变量,是由这一层向外一层一层的找变量名。
补充:在函数内对全局变量的引用是可以修改的
name = 'laowang'
male = {'age':14}
def test():
def test1():
name = 'laoli'
male['age'] = 99
return test1
res = test()()
print(name) #结果:laowang
print(male) #结果:{'age': 99}
打印顺序例子:
#执行顺序
name='老王' #
def laozhang(): #
name = "老张" #3.1
print(name) #3.2 第一次打印老张
def laoli(): #3.3
name = "老李" #3.4.1
print(name) #3.4.2 第二次打印老李
def laozhao(): #3.4.3
name = '老赵' #3.4.5.1
print(name) #3.4.5.2 第四次打印老赵
print(name) #3.4.4 第三次打印老李
laozhao() #3.4.5
laoli() #3.4
print(name) #3.5 第五次打印老张
laozhang() #
'''结果:老张
老李
老李
老赵
老张'''
python中的参数、全局变量及局部变量的更多相关文章
- Python中的参数
Python中的参数 1. python函数参数有多重形式: * test(arg1,arg2,`*args`) * test(arg1,arg2,`*args`,`**kwargs`) 2. 其中比 ...
- 从 python 中 axis 参数直觉解释 到 CNN 中 BatchNorm 的工作方式(Keras代码示意)
1. python 中 axis 参数直觉解释 网络上的解释很多,有的还带图带箭头.但在高维下是画不出什么箭头的.这里阐述了 axis 参数最简洁的解释. 假设我们有矩阵a, 它的shape是(4, ...
- (转)python中函数参数中如果带有默认参数list的特殊情况
在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 1 2 3 4 5 6 7 8 9 def f(x,l=[]): for i in range(x): ...
- python中函数参数的引用方式
值传递和引用传递时C++中的概念,在python中函数参数的传递是变量指向的对象的物理内存地址!!! python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是“传对象引用”的方 ...
- python中list作为全局变量无需global声明的原因
发现一个问题. python中list变量作为全局变量时,在函数中可以直接修改. 而普通变量则需要先在函数中global声明,否则会报错. 例如: a = 1 def fun(): global a ...
- Python之路 day3 全局变量、局部变量
#!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa """ 全局与局部变量 在子程序中定义的变量称为局部变 ...
- Python语法基础——关于全局变量与局部变量
1.函数内部的变量名如果第一次出现,且出现在=前面,即被视为定义一个局部变量,不管全局域中有没有用到该变量名,函数中使用的将是局部变量,例如: num = 100 def func(): num = ...
- python中的参数问题
python中的有默认参数和可变参数之分 默认参数arg 可变参数args, kargs 默认参数arg就是调用指定参数 可变参数*arg调用时传入的的参数会被python自动包装为列表 可变参数ka ...
- (转)python中的参数:*args和**kwargs
def foo(*args, **kwargs):print 'args = ', argsprint 'kwargs = ', kwargsprint '---------------------- ...
随机推荐
- Educational Codeforces Round 21E selling souvenirs (dp)
传送门 题意 给出n个体积为wi,价值为ci的物品,现在有一个m大的背包 问如何装使得最后背包内的物品价值最大,输出价值 分析 一般的思路是01背包,但n*v不可做 题解的思路 We can iter ...
- hdoj5806【尺取】
(补题,妈蛋那时候大哥给我说是尺取,我不想打-真是艾斯比了-) 题意: 退役狗 NanoApe 滚回去学文化课啦! 在数学课上,NanoApe 心痒痒又玩起了数列.他在纸上随便写了一个长度为 n 的数 ...
- 树莓派 zero w 一根线使用
参考网站:https://sspai.com/post/40086 硬件: 一台mac电脑 一根micro b usb线 一块zero w板子 一张micro sd卡 一.制卡 格式化 烧写镜像文件 ...
- bzoj 1022: [SHOI2008]小约翰的游戏John【anti-nim】
如果全是1,那么n是奇数先手必败 否则,xor和为0先手必败 证明见 https://www.cnblogs.com/Wolfycz/p/8430991.html #include<iostre ...
- 11.5NOIP模拟赛
/* 唉,那个第二种策略应该是没用吧. 为什么我列出式子最优策略跟第二种策略有关??为什么我写了写分布列还是跟第二种策略有关??为什么数学还没学到期望的孩子们都A了? 唉.人生啊. 0.5h后 我好像 ...
- 【POJ - 3190 】Stall Reservations(贪心+优先队列)
Stall Reservations 原文是English,这里直接上中文吧 Descriptions: 这里有N只 (1 <= N <= 50,000) 挑剔的奶牛! 他们如此挑剔以致于 ...
- 黑客攻防技术宝典web实战篇:攻击应用程序逻辑习题
猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 何为强制浏览?可以通过它确定哪些漏洞? 强制浏览包括避开浏览器导航对应用程序功能访问顺序实 ...
- LBP特征
此篇摘取 <LBP特征原理及代码实现> <LBP特征 学习笔记> 另可参考实现: <LBP特征学习及实现> <LBP特征的实现及LBP+SVM分类> & ...
- 洛谷 P3768 简单的数学题
https://www.luogu.org/problemnew/show/P3768 化简一下式子,就是$\sum_{d=1}^ncalc(d)d^2\varphi(d)$ 其中$calc(d)=\ ...
- python programming
1. super 2. *args, **kwargs 3. class object 4. type 5. isinstance 6. list[:] = another_list