0708学习笔记初步了解函数作用域和补充非可变类型参数的函数与可变类型参数的函数

本文介绍了函数作用域的基本概念,包括全局作用域和本地作用域,强调了每次函数调用都会创建新的本地作用域。同时,文章还讨论了非可变类型参数的函数,指出其参数数量固定,调用时需匹配形参数量,否则会导致类型错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初步了解函数作用域和补充非可变类型参数的函数与可变类型参数的函数

函数作用域

模块定义全局作用域

函数定义本地作用域

1内嵌的模块是全局作用域

2全局作用域的作用范围仅限于单个文件

3每次对函数的调用都创建一个新的本地作用域

4在函数中赋值的变量名除非特别声明为全局变量,否则均为本地变量

5所有的变量名都可以归纳为本地,全局,内置


普通函数(非可变参数函数)的参数类型虽然不定,但是参数的数量是一定的。调用函数是传进去的“实参”数量必须与函数定义中的“形参”数量一致,不能多也不能少,不然会引发类型错误:

>>> def func(arg):
	print arg
	
>>> func(3)
3
>>> func()
Traceback (most recent call last):
  File "<pyshell#72>", line 1, in <module>
    func()
TypeError: func() takes exactly 1 argument (0 given)
>>> func(1,2)
Traceback (most recent call last):
  File "<pyshell#73>", line 1, in <module>
    func(1,2)
TypeError: func() takes exactly 1 argument (2 given)

至于“非可变参数”的函数,分两种:
单星号参数(*arg),笔记中好像有点误解哦,它代表的并不是两个参数,而是0个或多个,不限量的。传进去的参数实际上被存储在一个临时的“元组(Tuple)”中,看例子:

>>> def f1(*x):  
    if len(x) == 0:  
        print 'None!'  
    else:  
        print x  
      
>>> f1()  
None!  
>>> f1(1,'s','fun')  
(1, 's', 'fun')  
>>> f1(k=1,l=2)  
Traceback (most recent call last):  
  File "<pyshell#29>", line 1, in <module>  
    f1(k=1,l=2)  
TypeError: f1() got an unexpected keyword argument 'k'  

第二种可变类型参数的函数就是“双星号参数”(**args)。这种形式其实函数内部将参数存储在临时的一个字典中,传参数的形式必须是func(arg1=val1,arg2=val2...),不然也会引发类型错误,看例子:

>>> def f2(**arg):  
    if len(arg) == 0:  
        print 'None!'  
    else:  
        print arg  
          
>>> f2()  
None!  
>>> f2(x=1,y=2)  
{'y': 2, 'x': 1}  
>>> f2(4,5)  
Traceback (most recent call last):  
  File "<pyshell#38>", line 1, in <module>  
    f2(4,5)  
TypeError: f2() takes exactly 0 arguments (2 given)  
  
>>> def f3(arg1,*arg2,**arg3):  
    print 'arg1:',arg1  
    if len(arg2) == 0:  
        print 'arg2:None!'  
    else:  
        print 'arg2:',arg2  
    if len(arg3) == 0:  
        print 'arg3:None!'  
    else:  
        print 'arg3:',arg3  
  
          
>>> f3(1)  
arg1: 1  
arg2:None!  
arg3:None!  
>>> f3(1,2)  
arg1: 1  
arg2: (2,)  
arg3:None!  
>>> f3(1,2,'s',x=1,y=2,z=3)  
arg1: 1  
arg2: (2, 's')  
arg3: {'y': 2, 'x': 1, 'z': 3}  

 



__________________
头疼加恶心看会代码分散注意力
哪个等腰三角形看人家写的答案就理解了,自己写就写不出来。。
这样下去是不是就完蛋了。。。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值