python变量作用域,函数与传参
一、元组传值:
一般情况下函数传递参数是1对1,这里x,y是2个参数,按道理要传2个参数,如果直接传递元祖,其实是传递一个参数
>>> def show( x, y ):
... print x, y
...
>>> a = ( 10, 20 )
>>> show( a, 100 )
(10, 20) 100
而如果要把一个元祖( 有2项 )传给x和y,传递的时候要用*a,如果一个函数要3个参数,就不能传递2项的元祖
>>> def show( x, y ):
... print "%s : %s" % ( x, y )
...
>>> a=(10,20)
>>> show(*a)
10 : 20
>>> b=(10,20,30)
>>> show(*b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: show() takes exactly 2 arguments (3 given)
print "%s : %s" % ( x, y )
这个百分号%s 类似c语言的printf,占位符 表示要用一个字符串来解释,后面的% ( x, y ) 就是传值. x传给第一个%s, y传给第二个%s
如果后面不传值,就是打印字符串本身
>>> print "%s : %s" % ( 'hello', 'ghostwu' )
hello : ghostwu
>>> print "%s : %s"
%s : %s
二、变量作用域跟javascript一样
函数外面定义的是全局变量,可以在函数里面或者外面访问
函数里面定义的是局部变量,函数调用完毕之后会被释放
>>> myname = 'ghostwu'
>>> def show():
... print myname
... x = 10
...
>>> show()
ghostwu
>>> x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> myname
'ghostwu'
>>>
global关键字可以把局部变量变成全局变量,这点跟php不一样(php是把全局变量引用到函数内部使用)
>>> def show():
... global a
... a = 10
...
>>> show()
>>> a
10
同名的全局变量和局部变量,函数内访问的是局部变量,外面是全局变量
>>> a = 100
>>> def show():
... a = 10
... print a
...
>>> a
100
>>> show()
10
>>> a
100
如果,同名的局部变量被global,并且函数被执行,那么函数执行之后 在输出这个变量,就是局部变量中的值
>>> a = 1
>>> def show():
... global a
... a = 2
...
>>> a
1
>>> show()
>>> a
2
三、函数的默认参数
>>> def show( name = 'ghostwu', age = 20 ):
... print "name: %s" % name
... print "age: %s" % age
...
>>> show()
name: ghostwu
age: 20
>>> show( 'zhangsan', 30 )
name: zhangsan
age: 30
四,如果传递一个元组,他们是按对应的位置传递,不会智能判断变量的顺序
>>> t=(100,'zhangsan')
>>> show( *t )
name: 100
age: zhangsan
>>>
你会发现, 100传递给了name, zhangsan传递给了age
如果用字典传递,就会按键值对对应,传参数时用两个**
>>> show()
name: ghostwu
age: 20
>>> d={"age":30,"name":"zhangsan"}
>>> show( *d )
name: age
age: name
>>> show( **d )
name: zhangsan
age: 30
>>>
五,接收多余的参数
>>> def show( x, *args ):
... print x
... print args
...
>>> show(1)
1
()
>>> show( 1, 2, 3, 4, 10 )
1
(2, 3, 4, 10)
>>>
形参*args可以接收不定参数,es6有类似的特性
六、接收字典类型的不定参数
>>> def show( x, *targs, **dargs ):
... print x
... print targs
... print dargs
...
>>> show( 10 )
10
()
{}
>>> show( 10, 20, 30, 40 )
10
(20, 30, 40)
{}
>>> show( 10, 20, 30, a = 100, b=200 )
10
(20, 30)
{'a': 100, 'b': 200}
python变量作用域,函数与传参的更多相关文章
- python -- unittest测试用例函数无法传参的处理方法(ddt)
1.超继承 重写测试用例类的init方法,如下所示. import requests import unittest class XiaoheiCases(unittest.TestCase): de ...
- Python全栈工程师(函数的传参)
ParisGabriel 感谢 大家的支持 每天坚持 一天一篇 点个订 ...
- Python之函数(一)定义函数以及传参
定义函数以及传参 函数的定义 def 函数名(): 函数体 例子: def func():#def关键字--定义 func函数名--和变量定义规则一样 ()必须要写格式 :声明 语句结束 s=[1,2 ...
- Python 变量作用域与函数
Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...
- python变量作用域
[python变量作用域] 几个概念: python能够改变变量作用域的代码段是def.class.lamda. if/elif/else.try/except/finally.for/while 并 ...
- Python 变量作用域 LEGB (上)—— Local,Global,Builtin
Python 变量作用域的规则是 LEGB LEGB含义解释:L —— Local(function):函数内的名字空间E —— Enclosing function locals:外部嵌套函数的名字 ...
- C#为什么不能像C/C++一样的支持函数只读传参
C#为什么不能像C/C++一样的支持函数只读传参? 这个问题其实问的人挺多的,我自己也经常想实现这个功能,但是发现总是那么的不尽人意. 有些人倒是给出了一下答案,但是都不能很好的解决像C/C++一样的 ...
- C# PDF Page操作——设置页面切换按钮 C# 添加、读取Word脚注尾注 C#为什么不能像C/C++一样的支持函数只读传参 web 给大家分享一个好玩的东西,也许你那块就用的到
C# PDF Page操作——设置页面切换按钮 概述 在以下示例中,将介绍在PDF文档页面设置页面切换按钮的方法.示例中将页面切换按钮的添加分为了两种情况,一种是设置按钮跳转到首页.下页.上页或者 ...
- Python 变量作用域 LEGB (下)—— Enclosing function locals
上篇:Python 变量作用域 LEGB (上)—— Local,Global,Builtin https://www.cnblogs.com/yvivid/p/python_LEGB_1.html ...
随机推荐
- ADB 命令介绍
Android adb shell am 命令介绍 am这个指令是 activity manager的缩写.这个命令可以启动Activity.打开或关闭进程.发送广播等操作. am命令格式如下 adb ...
- jQuery基础(3)- ajax
一.jQuery的ajax 1.什么是ajax AJAX = 异步的javascript和XML(Asynchronous Javascript and XML). 简言之,在不重载整个网页的情况下, ...
- 用代码来细说Csrf漏洞危害以及防御
开头: 废话不多说,直接进主题. 0x01 CSRF介绍:CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session ...
- 让PETSc跑得再快一些
最近做了一个使用PETSc来求解线性方程组(Ax=b)的项目,把其中遇到的一些坑和解决方法记录下来.本文不介绍PETSc如何入门,而是给出一些能让PETSc运行得更快的编程细节.开始我只是简单地修改P ...
- 并发上下文控制包Context
Context,是golang用来控制并发流程的库,它能方便的将主控程序的停止信号传递到goroutinue中,从而实现一键中止关联goroutinue的执行,除此之外,它还能将外部变量通过Value ...
- 锐捷客户端下虚拟机VMware无法联网的问题
打开VMware,选择右下角的网络适配器,设置为NAT模式. 如果还不能上网,则打开电脑的任务管理器,保证VMwate的服务保持开启. 但是锐捷客户端,会自动检测并且关闭VMware NAT Serv ...
- [工具]渗透神器CobaltStrike 3.1.2 K8去后门破解版 & Windows版TeamServer
CS简介 Cobalt Strike(简称CS)是全球黑客公认一款非常优秀的渗透测试神器,以metasploit为基础的GUI的框架式渗透工具,集成了传统远控功能(远程桌面VNC.键盘记录.CmdSh ...
- SpaceSyntax【空间句法】之DepthMapX学习:第四篇 凸多边形图分析[未完]
这一篇正式讲解分析类型中的第一个,凸多边形分析,流程图参照上一篇的. 博客园/B站/知乎/CSDN @秋意正寒(我觉得这一篇肯定很多盗图的,那么我在版头加个本篇地址吧) https://www.cnb ...
- 没啥事用C语言写一个Trie tree玩玩,支持中英文,用g++编译通过
#include <cstdio> #include <cstdlib> #include <vector> #define ALPHABETS 2600000 # ...
- opencv2函数学习之threshold:实现图像阈值化
在opencv2中,threshold函数可以进行阈值化操作. double threshold( const Mat& src, Mat& dst, double thresh,do ...