码迷,mamicode.com
首页 > 其他好文 > 详细

函数和变量生存区间

时间:2016-07-10 18:10:46      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

 

1     
2 >>> Saysome(袁重阳,你好)
3 袁重阳->你好
4 >>> Saysome(你好,袁重阳)
5 你好->袁重阳
6 >>> Saysome(words=你好,name=袁重阳)
7 袁重阳->你好
8 >>>     #可以通过提示形参来避免编译器按照顺序赋值 . 

`

1 >>> def saysome(name=小甲鱼,words=让编程改变世界):
2     print(name+"->"+words)
3 >>> saysome()
4 小甲鱼->让编程改变世界
5 >>> saysome(老甲鱼)
6 老甲鱼->让编程改变世界
7 >>> saysome(words=不让编程改变世界)
8 小甲鱼->不让编程改变世界

 

收集参数.

>>> def test(*params):
    print("参数的长度是:",len(params))
    print("第二个参数是:",params[1])

    
>>> test(1,小甲鱼,3.14,5,6,7,8)
参数的长度是: 7
第二个参数是: 小甲鱼
>>> def test(*params,tex):
    print("参数的长度是:",len(params))
    print("第二个参数是:",params[1])

    
>>> test(1,2,3,4,5,6,7,8)
Traceback (most recent call last):
  File "<pyshell#38>", line 1, in <module>
    test(1,2,3,4,5,6,7,8)
TypeError: test() missing 1 required keyword-only argument: tex
>>> #发生错误  因为调用的时候里面的参数被全部传送至   收集参数那里.
>>> test(1,2,3,4,5,6,7,tex=8)
参数的长度是: 7
第二个参数是: 2
>>> #可以通过上述的指定参数来避免 当然也可以通过默认参数避免
>>> def test(*params,tex=8):
    print("参数的长度是:",len(params))
    print("第二个参数是:",params[1])

    
>>> test()
参数的长度是: 0
Traceback (most recent call last):
  File "<pyshell#44>", line 1, in <module>
    test()
  File "<pyshell#43>", line 3, in test
    print("第二个参数是:",params[1])
IndexError: tuple index out of range
>>> test(1,2,3)
参数的长度是: 3
第二个参数是: 2

 

>>> def hello():
    print("hello")

    
>>> temp=hello()
hello
>>> type(temp)
<class NoneType>
>>> print(hello)
<function hello at 0x02E32858>
>>> print(temp)
None
>>> #    可以看出没有返回值
>>> def hello():
    print("hello")
    return 1

>>> print(hello())
hello
1
>>> temp=hello()
hello
>>> print(temp)
1
>>> def hello():
    return 1,2,3,4,5,6

>>> #返回多个值
>>> hello()
(1, 2, 3, 4, 5, 6)

下面说重点函数变量的作用域问题 

在函数之中声明的变量都是局部变量 , 在函数外面声名的就是全局变量 , 在函数中如果要修改全局变量的话当你赋值 , 编译器会再在函数之中声明一个局部变量 而且 当你声明的时候 全局变量会被隐藏 . 如果小伙子 实在想在函数内部修改全局变量的话 . 可以在函数中 将该全局变量进行一次全局变量定义然后开始修改 . 修改代码如下

 1 def dis(price,rate):
 2     final_price=price*rate
 3     global old_price 
 4     old_price=10
 5     print(old_price)
 6     return final_price
 7 old_price=float(input(请输入原价:\t))
 8 rate=float(input(请输入折扣率:\t))
 9 new_price=dis(old_price,rate)
10 print(打折后的价格是:\t,new_price)
11 print("这里试图输出修改后的全局变量old_price:\t",old_price)

 

 

 

实验代码如下

 

def dis(price,rate):
    final_price=price*rate
    #print("这里试图打印全局变量old_price的值:\t",old_price)
    # old_price=88       #这里试图修改    全局变量
    #print(‘修改后old_price的值是:\t‘,old_price)
    #old_price=80  #如果在这里试图修改全局变量 old_price的话编译器会再声明一个局部变量. 
    print(old_price)
    return final_price
old_price=float(input(请输入原价:\t))
rate=float(input(请输入折扣率:\t))
new_price=dis(old_price,rate)
#print(‘修改后的old_price的值是:\t‘,old_price)
print(打折后的价格是:\t,new_price)
#在函数之中定义的变量都是局部变量在变量外无效 .
#因为在执行函数的时候我们将其储存带 "栈" 中当函数执行完毕的时候我们将该函数从
# "栈" 中删除 所以这时候其中的变量也被随之删除了 .在外界不能被访问 . 
#print(‘这里试图打印局部变量final_price的值:\t‘,final_price)    # 这一句话有错 , 局部变量在外面不能访问 .

# 在和局部变量相对的是全局变量  全局变量是在 函数之外声明的 (其作用于参考局部变量可以得出 : 是整个文件 . 因为整个文件自始至终都存在 . )

 

函数和变量生存区间

标签:

原文地址:http://www.cnblogs.com/A-FM/p/5658126.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!