Python函数

一、函数的作用

1、减少重复代码

2、方便修改,更易拓展

3、保持代码一致性

二、函数格式

def 函数名 ():

      函数体

三、函数名的命名规则:

1、函数名必须以下划线或字母开头,可以包含字母、数字或下划线的任意组合,不能使用任何的标点符号。

2、函数名区分大小写

3、函数名不能是保留字

四、调用

函数名()

 五、函数参数

1、直接参数

在定义函数时将形参放在括号内。即def 函数名 (形参1 ,形参2,……)

def function (name ,age ):                                     #定义函数

   print('name is %s,age is %s'%(name,age)         #函数内容

function('tom','18')                        #调用函数,结果为name is tom,age is 18

2、关键字参数

def function (name ,age ):                                     #定义函数

   print('name is %s,age is %s'%(name,age)         #函数内容

function(age='18',name='tom')             #调用函数,给形参赋值后,在传递形参值时,不用一一对应。结果为name is tom,age is 18

3、默认参数

def function (name ,age ,sex='man'):

   print('name is %s,age is %s,is %s'%(name,age,sex))

function(age='18',name='tom')        #sex的值为默认值‘man’, name is tom,age is 18,is man

function('jim','20')                           # sex的值为默认值‘man’, name is jim,age is 20,is man

function('anna','20','woman')          #sex的值为新赋值‘women’ ,name is anna,age is 20,is woman

4、可变长参数

a)通过将参数转化为元组实现可变长

参数前加一个“ * ”。

def add (*add):                                #定义函数add

    print (add)                                 #函数内容

add (1,2,3)                                        #调用函数。结果为(1, 2, 3)

b) 通过将参数转化为字典实现可变长

参数前加一个“ ** ”。如果是混合参数(既有元组转换的可变长参数,又有字典转换的可变长参数)时,需要将两种参数分开传递且元组转换的可变长参数必须放在前边,字典转换的可变长参数必须放在后面,如下:

def add (*add,**args):                              #定义函数

    print (add,args)                                   #函数内容

add (1,2,3,job='IT',hobby='sing')             #调用函数(1, 2, 3){'job': 'IT', 'hobby': 'sing'}

六、return

1、Return作用:

a)       结束函数

b)       返回某个对象

2、设置return值

def add (*addS):                   #定义函数add
    Sum = 0                        #定义函数内容
    for i in addS:
        Sum += i
    return Sum                       #设置返回值
A=add (1,2,3)                        #调用函数。并把返回值赋给A
print(A)                             #6
注意:
1.函数里如果没有return,会默认返回一个None。
2.如果return多个对象,那么Python会帮我们把多个对象封装成一个元组

七、nonlocal和global

Python中的作用域分4种情况:

L:local,局部作用域,即函数中定义的变量;

E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;

G:global,全局变量,就是模块级别定义的变量;

B:built-in,系统固定模块里面的变量,如int,byrearray等。搜索变量的优先级顺序依次是:局部作用域>外层作用域>当前模块中的全局变量>Python内置作用域,也就是LEGB.

x = int (2.9)          #int  built-in
g_count = 0              #global
def out ():
    o_count = 1         #enclosing
   
def inner_1 ():
        i_count =2        #local

 

在函数外定义的变量为全局变量,在函数内定义的变量,如无特殊说明则为局部变量。在函数内可以调用全局变量但不可以更改全局变量的值。如需更改全局变量的值,则需在变量前加global声明是全局变量。

如果定义函数时又定义了内层函数,则需要用nonlocal声明。

conut=0
def outer():
    conut=10
    #print(conut)
   
def inner() :
        nonlocal conut
        conut = 20
        print(conut)
        #return conut
   
inner()
outer()

posted @ 2017-10-22 11:32  xsan  阅读(265)  评论(0编辑  收藏  举报