python 函数,,一,定义函数 def


一,定义函数

deffunctionname(parameters):"函数_文档字符串"function_suitereturn[expression]

二,引用传递 or 值传递?

示例1:

deffunc1(name):name=name+"sun"deffunc2(score):score.append(6)name1=‘oracle‘func1(name1)printname1score=[9,8,7]func2(score)printscore

运行结果:

oracle

[9, 8, 7, 6]

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

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

三,参数形式

1.必备参数

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

示例:

deffunc(string):printstringfunc(‘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解释器能够用参数名匹配参数值。

示例:

deffunc(name,age):printnameprintagefunc(age=14,name=‘osc‘)

运行结果:

osc

14

3.缺省参数

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

示例:

deffunc(name=‘osc‘,age=14):printnameprintagefunc()print‘-----------‘func(‘sun‘)print‘-----------‘func(age=17)

运行结果:

osc

14

-----------

sun

14

-----------

osc

17

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

示例1:

deftest(a,*args,**kwargs):printaprintargsprintkwargstest(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:

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

运行结果:

1

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

{}

示例3:

deftest(a,*args,**kwargs):printaprintargsprintkwargsa1=[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‘deffunc():printnamefunc()printname

运行结果:

osc

osc

示例2:

name=‘osc‘deffunc():name=‘func‘printnamefunc()printname

运行结果:

func

osc

示例3:

name=‘osc‘deffunc():globalnamename=‘func‘printnamefunc()printname

运行结果:

func

func


python 函数

评论关闭