Python中函数的定义以及形参实参小结

1.python中函数的定义

Python中函数的定义形式:

def func_name(parameter1,parameter2,...):
	语句段
	return语句

例子:

def printhello(personname):
	return "Hello," + personname + "!"

2.在函数体内修改参数内容会影响到函数外的对象吗?

(1)如果数字、字符串或元组,本身就是不可变的,自然也不会影响到函数体外的对象

(2)如果是列表或字典,那么函数内修改参数内容,就会影响到函数体外的对象。

备注:这里的修改参数是修改参数对象内部的值,不是赋值哦。即var[1]='hello'和var=['hello','world']区别。即使是列表,在函数体内对参数重新赋值了,不会影响到函数体外的对象哦。注意和c++的比较。


3.python中传递实参是可以指定参数的名字 以及默认参数的定义

def foo(familyname,givenname):
#param1,param2就是位置参数
#调用foo函数时,参数的顺序是由严格顺序的。
#eg: foo('wang', 'hao')   是正确的
#eg: foo('hao', 'wang')   是错误的
#eg: foo(familyname='wang', givenname='hao')   是正确的
#eg: foo(givenname='hao', familyname='wang')   是正确的
另外,定义函数时可以定义默认参数,形式如下:

def foo(familyname='wang', givenname='hao'):


4.python中可变参数

(1)函数定义可变参数

形式1:

def foo(*params):
#params在函数体内的类型是元组

#调用方式是
foo(1, 4, 56)

形式2:

def foo(**params):
#params在函数体内的形式是字典

#调用方式是
foo(x=1, y=4, z=56)


举一个普通参数,形式1(位置参数)和形式2(关键字参数)联合一起的例子,如下所示:

def print_params(x, y, z=3, *pospar, **keypar):
        print x, y, z
        print pospar
        print keypar

if __name__ == '__main__':
        print_params(1, 2, 3, 5, 6, 7, foo=1, bar=2)
上述程序输出结果为:

1 2 3
(5, 6, 7)
{'foo': 1, 'bar': 2}

5.形参的两种特殊实参传递形式

(1)以元组作为实参

def foo(familyname, givenname):
        print 'my familyname is ' + familyname
        print 'my givenname is ' + givenname

if __name__ == "__main__":
        username = ('wang', 'hao')
        foo(*username)

(2)以字典作为实参

def foo(familyname, givenname):
        print 'my familyname is ' + familyname
        print 'my givenname is ' + givenname

if __name__ == "__main__":
        username = {'givenname':'hao', 'familyname':'wang'}
        foo(**username)


备注:python中所谓的关键字参数和位置参数,都是来描述实参的形式。形参中有默认参数概念。



你可能感兴趣的:(Python中函数的定义以及形参实参小结)