python 函数

一,定义函数

def functionname( parameters ):
   "函数_文档字符串"
   function_suite
   return [expression]

二,引用传递 or 值传递?

示例1:

def func1(name):
    name=name+"sun"
    
def func2(score):
    score.append(6)
    
name1=‘oracle‘
func1(name1)
print name1

score=[9,8,7]
func2(score)
print score

运行结果:

oracle

[9, 8, 7, 6]

所有参数(自变量)在Python里都是按引用传递。这意味着函数内对参数的改变会影响到原始对象。

不过事实上只有可变对象会受此影响,对不可变对象来说,它的行为类似按值传递。

三,参数形式

1.必备参数

必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。不然会出现语法错误。

示例:

def func(string):
    print string
    
func(‘osc‘)

func()

运行结果:

osc

Traceback (most recent call last):

  File "E:\python\sun.py", line 6, in <module>

    func()

TypeError: func() takes exactly 1 argument (0 given)

2.命名参数

命名参数和函数调用关系紧密,调用方用参数的命名确定传入的参数值。你可以跳过不传的参数或者乱序传参,因为Python解释器能够用参数名匹配参数值。

示例:

def func(name,age):
    print name
    print age
    
func(age=14,name=‘osc‘)

运行结果:

osc

14

3.缺省参数

调用函数时,缺省参数的值如果没有传入,则被认为是默认值。

示例:

def func(name=‘osc‘,age=14):
    print name
    print age
    
func()

print ‘-----------‘

func(‘sun‘)

print ‘-----------‘

func(age=17)

运行结果:

osc

14

-----------

sun

14

-----------

osc

17

4.不定长参数 *args **kwargs

示例1:

 def test(a,*args,**kwargs):
        print a
        print args
        print kwargs
            
 test(1,2,3,4,name=‘sun‘,age=25)

运行结果:

1

(2, 3, 4)

{‘age‘: 25, ‘name‘: ‘sun‘}


*args,**kwargs是python中的可变参数。

*args表示任何多个无名参数,它是一个tuple;**kwargs表示任意多个关键字参数,它是一个dict。

并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前.

示例2:

    def test(a,*args,**kwargs):
            print a
            print args
            print kwargs
            
    a1=[5,6,7,8]
    a2={‘addr‘:‘dl‘,‘phone‘:‘123‘}
    
    test(1,a1,a2)

运行结果:

1

([5, 6, 7, 8], {‘phone‘: ‘123‘, ‘addr‘: ‘dl‘})

{}

示例3:

    def test(a,*args,**kwargs):
            print a
            print args
            print kwargs
            
    a1=[5,6,7,8]
    a2={‘addr‘:‘dl‘,‘phone‘:‘123‘}
    
    test(1,*a1,**a2)

运行结果:

1

(5, 6, 7, 8)

{‘phone‘: ‘123‘, ‘addr‘: ‘dl‘}


参数中*list/tuple形式表示,将list/tuple的元素挨个取出,作为函数参数;

参数中**dict形式表示,将dict的元素挨个取出,并形成key=value,作为函数参数;

四,return语句

return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。

五,变量作用域

一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。

变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。两种最基本的变量作用域如下:

  • 全局变量:定义在函数外的拥有全局作用域,局变量可以在整个程序范围内访问。

  • 局部变量:定义在函数内部的变量拥有一个局部作用域,局部变量只能在其被声明的函数内部访问。

当要在函数内,使用全局变量时,使用关键字global 变量名即可。

示例1:

name=‘osc‘

def func():
    print name
    
func()

print name

运行结果:

osc

osc

示例2:

name=‘osc‘

def func():
    name=‘func‘
    print name
    
func()

print name

运行结果:

func

osc

示例3:

name=‘osc‘

def func():
    global name
    name=‘func‘
    print name
    
func()

print name

运行结果:

func

func


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。