python学习之函数基础

第一个python函数:

>>> def func_1():
...     print 'hello python'
... 
>>> func_1()
hello python

变量:根据作用域不同,分为局部变量和全局变量

        局部变量:在函数内定义的变量,局部变量作用域在函数之内

        全局变量:定义在函数之外,在函数内使用global关键字标记,全局变量作用域为整个模块;全局变量尽量少用

 

示例:局部变量:

#!/usr/bin/env python
# coding=utf-8   申明中文字符集时'='两边不能留空格
arg = 10  #全局变量
def func():
        arg = 2 #局部变量,与外边的arg为不同的两个变量
        print arg
func()
print arg

执行结果:

[root@server24 python]# chmod +x func_1.py 
[root@server24 python]# ./func_1.py 
2
10

示例:全局变量:

#!/usr/bin/python
#coding=utf-8
arg = 10
def func():
        global arg  #global定义arg为全局变量,下面的赋值会覆盖函数体>外的操作
        arg = 2
        print arg
func()
print arg

执行结果:

[root@server24 python]# chmod +x func_2.py 
[root@server24 python]# ./func_2.py 
2
2

带参数的函数

位置参数:按顺序依次给变量赋值

关键字参数:顺序不再重要,可按关键字给变值

示例:位置参数:

#!/usr/bin/env python 
#coding=utf-8
def func(arg1,arg2,arg3):
        print arg1,arg2,arg3

func(1,2,3)  #局部变量

执行结果:

[root@server24 python]# chmod +x func_3.py 
[root@server24 python]# ./func_3.py 
1 2 3

示例:关键字参数:

#!/usr/bin/env python 
#coding=utf-8
def func(arg1,arg2,arg3):
        print arg1,arg2,arg3

func(arg1=1,arg3=2,arg2=3)  #局部变量

执行结果:

[root@server24 python]# ./func_3.py 
1 3 2

位置参数和关键字参数可以混合使用,但是需要注意的是位置参数须在关键字参数之前

示例:位置、关键字参数混合使用

#!/usr/bin/env python 
#coding=utf-8
def func(arg1,arg2,arg3):
        print arg1,arg2,arg3

func(1,arg3=2,arg2=3)  #局部变量

执行结果:

[root@server24 python]# ./func_3.py 
1 3 2

默认参数:对一个或多个指定默认值:

示例:默认值参数:

#!/usr/bin/env python
#coding=utf-8
def func(arg1,arg2=10):  #有默认值参数须在非默认值参数后面
        print arg1,arg2
func(100)  #非默认值参数须赋值,默认值参数可赋可不赋值

执行结果:

[root@server24 python]# ./func_4.py 
100 10


可变参数

python支持可变参数。参数分为两种,一种是位置参数,一种是关键字参数。 

示例:可变位置参数:

#!/usr/bin/env python
#coding=utf-8
def func(*args):  #args在函数体内被打包成一个元组
        print type(args) 
        print args
func(1,2,3,4,56,7)

执行结果:

[root@server24 python]# ./func_5.py 
<type 'tuple'>
(1, 2, 3, 4, 56, 7)

示例:可变关键字参数:

#!/usr/bin/env python
#coding=utf-8
def func(**args):  #args在函数体内被打包成一个字典
        print type(args)
        print args
func(name='tom',age='30',qq='33804139')

执行结果:

<span style="font-size:14px;">[root@server24 python]# vim func_5.py 
[root@server24 python]# ./func_5.py 
<type 'dict'>
{'qq': '33804139', 'age': '30', 'name': 'tom'}

混合使用:

示例:

#!/usr/bin/env python
#coding=utf-8
def func(name,age,*args,**args1):  #非可变参数必须在可变参数之前;可变位置参数须在可变关键字参数之前
        print name,age
        for i in args:
                print i
        for x,y in args1.items():
                print "%s ==> %s" % (x,y)

func('tom',30,33804129,8888888,hello='python')

执行结果:

[root@server24 python]# ./func_6.py 
tom 30
33804129
8888888
hello ==> python


参数解包

参数解包发生在函数调用时。

    * 用于序列为位置参数。

    ** 用于解包字典为关键字参数

示例:

#!/usr/bin/env python
#coding=utf-8
def func(*args,**args1):   #args打包成一个元组,args1打包成一个字典
        for i in args:
                print i,
        for x,y in args1.items():
                print "%s ==> %s" % (x,y)

li = [2,3,4,5,6,7]
dic = {'name':'tom','age':30}
#func(li[0],li[1],li[2])  #传统的调用方法
func(*li,**dic)   #将列表li解包成位置参数并传递进去;将字典dic解包成>关键字参数并传递进去

执行结果:

[root@server24 python]# ./func_7.py 
2 3 4 5 6 7 age ==> 30
name ==> tom


函数返回值

    在函数体内输出print,会产生一定的副作用,一般在函数体内将结果return出来。

    return关键字:

        可以返回任何对象

        可以变相返回多值:默认返回的是一个元组

示例:

#!/usr/bin/env python
#coding=utf-8
def func(i):
        j = i * 2
        k = i * 5
        return j,k  #返回两个值,调用时需要用两个变量接收
x,y = func(2)
print x,y

执行结果:

[root@server24 python]# ./func_8.py 
4 10

当函数中没有return关键字时,函数会默认返回None 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章