博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python变量作用域,函数与传参
阅读量:6257 次
发布时间:2019-06-22

本文共 2269 字,大约阅读时间需要 7 分钟。

一、元组传值:

一般情况下函数传递参数是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 "
", line 1, in
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>>> xTraceback (most recent call last):  File "
", line 1, in
NameError: name 'x' is not defined>>> myname'ghostwu'>>>

global关键字可以把局部变量变成全局变量,这点跟php不一样(php是把全局变量引用到函数内部使用)

>>> def show():...     global a...     a = 10... >>> show()>>> a10

同名的全局变量和局部变量,函数内访问的是局部变量,外面是全局变量

>>> a = 100>>> def show():...     a = 10...     print a... >>> a100>>> show()10>>> a100

如果,同名的局部变量被global,并且函数被执行,那么函数执行之后 在输出这个变量,就是局部变量中的值

>>> a = 1>>> def show():...     global a...     a = 2... >>> a1>>> show()>>> a2

 

三、函数的默认参数

>>> def show( name = 'ghostwu', age = 20 ):...     print "name: %s" % name...     print "age: %s" % age... >>> show()name: ghostwuage: 20>>> show( 'zhangsan', 30 )name: zhangsanage: 30

 

四,如果传递一个元组,他们是按对应的位置传递,不会智能判断变量的顺序

>>> t=(100,'zhangsan')>>> show( *t )name: 100age: zhangsan>>>

你会发现, 100传递给了name, zhangsan传递给了age

 如果用字典传递,就会按键值对对应,传参数时用两个**

>>> show()name: ghostwuage: 20>>> d={
"age":30,"name":"zhangsan"}>>> show( *d )name: ageage: name>>> show( **d )name: zhangsanage: 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}

 

转载地址:http://ertsa.baihongyu.com/

你可能感兴趣的文章
小程序开发前的准备工作之【深入封装Component】
查看>>
AFN3.0源码解析
查看>>
oracle的drop命令
查看>>
设计与梳理企业二级流程的路线方法
查看>>
Python正则表达式指南
查看>>
使用css3制作渐变分割线
查看>>
垃圾回收概念与算法
查看>>
TFS实现需求工作项自动级联保存
查看>>
springmvc 4.x 处理json 数据时中文乱码
查看>>
Python练习(day7)
查看>>
网络工程师笔试题总结
查看>>
C# DataTable的詳細用法
查看>>
关于CISCO asa5510防火墙端口映射配置
查看>>
monkey详细介绍之二
查看>>
Java 读取 .properties 配置文件
查看>>
取消文件默认打开方式
查看>>
echarts使用笔记四:双Y轴
查看>>
二分法查找
查看>>
不用加减乘除实现加法运算
查看>>
django 快速搭建blog
查看>>