python编程-函数

一、函数是什么

函数是一段可以通过固定名称多次使用的代码段。

二、为什么要使用函数

我们在编写程序时,某个功能即某些代码块需要使用多次,那么我们可以把这个功能的代码块封装成一个函数。然后在需要使用这个功能的地方,直接调用这个函数即可。
函数的优点:
  减少代码行
  减少工作量
  当功能需要变更时,改变函数即可

三、内置函数

在python中有内置函数和自定义函数,前面使用的input()和print()就是python内置的两个函数,用来实现标准输入和标准输出。
查看python内置的函数

#!/usr/bin/env usipython3    
print(dir(__builtins__)) 

查看函数的功能说明

#!/usr/bin/env python3
print(abs.__doc__)

#!/usr/bin/env python3
print(help(max))

推荐使用第一种方式,第二种方式需要在交互器模式下使用。

四、函数如何定义

python中定义函数的关键字为def,def后面跟空格、函数名、中括号。
中括号里面是函数参数,中括号后是冒号: 然后在下一行,缩进体中编写函数体,函数的返回值用return返回。
函数中,函数名称下面””” “”” 引起的内容是函数的说明。使用”函数名.doc“可以引用。 格式如下:

def 函数名(参数列表):    
函数体    

示例:    
定义一个求两个数大小的函数:    
#!/usr/bin/env python3    

def SpecificSize(a,b):    
    """函数的功能说明"""
    if a > b:    
        c = "a比b大"    
    else:    
        c= "a比b小"    
    return c    

a=3    
b=2    

print(SpecificSize(a,b))    

#输出函数的说明
print(SpecificSize.__doc__)

五、函数如何调用

要调用函数,需要知道函数的名称和参数。以刚才自定义的函数为例,其中a和b就是参数。
调用方式就是:

SpecificSize(a,b)    
print(SpecificSize(a,b)) 是把函数调用的结果输出    

六、函数参数

必需参数(位置参数)

必需参数必需以正确的顺序传入函数。调用时的数量、位置和声明时一样。

示例1:    
#!/usr/bin/env python3    

def printem(ste):    
    print(ste)    
    return    

printem()    

执行这个程序以后,会报下面的错误,因为没有传递参数。    
Traceback (most recent call last):    
  File "test.py", line 5, in <module>    
    printem()    
TypeError: printem() takes exactly 1 argument (0 given)    


示例2:    
#!/usr/bin/env python3    

def printem(ste,ste2):    
    print(ste,ste2)    
    return    

printem("123")    

执行这个程序以后,会报下面的错误,因为只传递了一个参数。    
Traceback (most recent call last):    
  File "test3.py", line 6, in <module>    
    printem("123")    
TypeError: printem() takes exactly 2 arguments (1 given)    

正确调用方式:    
#!/usr/bin/env python3    

def printem(ste,ste2):    
    print(ste,ste2)    
    return    

printem("123","456")    

输出结果:    
123 456    

七、默认参数

默认参数,即函数的参数有一个默认值。函数调用时不传递参数的话,就会使用默认值。传递参数则会使用传递的值。

示例1:    
#!/usr/bin/env python3    

def printem(ste,ste2="456"):    
    print(ste,ste2)    
    return    

printem("123")    

输出结果:    
123 456    


示例2:    
#!/usr/bin/env python3    

def printem(ste,ste2="456"):    
    print(ste,ste2)    
    return    

printem("123","789")    

输出结果:    
123 789    

八、关键字参数

关键字参数是指在函数调用的时候,指定了参数名称的参数。使用关键字参数调用函数时,函数调用时传递的参数位置和函数定义时参数的位置可以不同。

示例:    
#!/usr/bin/env python3    

def printem(ste,ste2):    
    print(ste,ste2)    
    return    

printem(ste2="456",ste="123")    

输出结果    
123 456    

九、命名关键字参数

示例2:    
#!/usr/bin/env python3    

def printem(ste,ste2):    
    print(ste,ste2)    
    return    

printem(ste2="456",ste="123")    

输出结果    
123 456    

十、不定长参数

不定长参数,即在调用函数时,传入函数的参数个数不是固定的。不定长参数使用*和**来定义。*定义的参数会以元组(tuple)的形式导入,**定义的参数会以字典(dict)的形式导入。

示例1:    
#!/usr/bin/env python3    

def printem(ste,*ste2):    
    print(ste)    
    print(ste2)    
    return    

printem("123","456","789",)    

输出结果为    
123    
('456', '789')    


使用**不定长参数时,函数调用,需要指定关键字,否则无法传递。所以这种方式也可以称为关键字参数。    
示例2:    
#!/usr/bin/env python3    

def printem(ste,**ste2):    
    print(ste)    
    print(ste2)    
    return    

printem("123",a="456",b="789",)    

输出结果为    
123    
{'a': '456', 'b': '789'}    

十一、变量作用域

程序中的变量,并不是在任何位置都可以访问的,访问的权限有变量的作用域来决定,即变量是在哪里赋值的。
python中变量作用域分为4种:
L (Local) 局部作用域
E (Enclosing) 闭包函数外的函数中
G (Global) 全局作用域
B (Built-in) 内建作用域

以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

x = int(2.9)  # 内建作用域    
g_count = 0  # 全局作用域    

def outer():    
    o_count = 1  # 闭包函数外的函数中    
def inner():    
   i_count = 2  # 局部作用域    

  Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 f/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问

十二、局部变量和全局变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。

示例:    
#!/usr/bin/env python3    

c="5"  #全局变量      
def printem(ste,**ste2):    
    d="5"    #局部变量    
    print(ste)    
    print(ste2)    
    return    

printem("123",a="456",b="789",)    
print(d)



输出结果:
123
{'a': '456', 'b': '789'}
5

十三、global和nonlocal关键字

nonlocal用来修改嵌套作用域中的变量(需要在上一层中定义了此变量,否则无法使用。)

示例2:  
#!/usr/bin/env python3

def printem(ste):
    d=5
    sum = 100
    def inner():
        nonlocal sum
        sum = 20
        return

    inner()
    print(sum)
    print(ste)
    return
printem("123")


输出结果:
20
123

参考博文
官网函数说明
廖旭锋python3
菜鸟课程python3
变量作用域

Previous Post

python编程-循环

Next Post

面向对象编程

Related Posts