python基础六——函数参数
python的函数及参数
函数式编程最重要的是增强代码的重用性和可读性
1 def 函数名(参数): 2 3 ... 4 函数体 5 ...
函数的定义主要有如下要点:
- def:表示函数的关键字
- 函数名:函数的名称,日后根据函数名调用函数
- 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
- 参数:为函数体提供数据
- 返回值:当函数执行完毕后,可以给调用者返回数据。
以上要点中,比较重要有参数和返回值:
1、返回值
函数是一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。

def 发送短信(): 发送短信的代码... if 发送成功: return True else: return False while True: # 每次执行发送短信函数,都会将返回值自动赋值给result # 之后,可以根据result来写日志,或重发等操作 result = 发送短信() if result == False: 记录日志,短信发送失败...
2.参数
函数的有三中不同的参数:
- 普通参数
- 默认参数
- 动态参数
普通参数:
普通参数的传递并没有个数和数据类型的限制,可以传递字符串,数字,列表和字典。也不限定个数,需要注意的是:函数需要多少参数,调用的时候就要按照它定义时的顺序和数据类型传递过去。
def argtest(name,age,fruit_lst,hobby_dic): print 'Hello,me name is %s,i\'m %d year\'s old'%(name,age) print 'My favorite fruits are : %s'%'.'.join(fruit_lst) print 'My hobbies:' for hobby in hobby_dic: print '\t%s'%hobby_dic[hobby] lst = ['apple','banana','watermelon'] dic = {'hobby one':'teaism','hobby two':'sing'} argtest('Eva_J',18,lst,dic) 输出的内容: Hello,me name is Eva_J,i'm 18 year's old My favorite fruits are : apple.banana.watermelon My hobbies: teaism sing
默认参数:
默认参数是给参数加上一个默认的值,但我们调用函数的时候,如果传递了这个参数,那么使用我们传递过来的值;如果不传则使用默认的值,默认参数可以有多个,但是必须放在所有参数的最后。当我们有多个默认参数的时候,调用函数的时候可以使用参数名指定其中的某一个参数,以保证参数能准确的传递给被调用的函数。
def argvtest(argv1,argv2 = 'aaa',argv3 = 'bbb'):
print 'argv1:',argv1
print 'argv2:',argv2
print 'argv3:',argv3
argvtest('a1',argv3 = 'a2')
输出的内容:
argv1: a1
argv2: aaa
argv3: a2

def classmate(name,sex): print('%s : %s'%(name,sex)) classmate('辉煌','男') classmate(sex='男',name = '辉煌') def classmate1(name,sex='男'): print('%s : %s'%(name,sex)) classmate1('辉煌') classmate1('婷婷',sex= '女') def sum(*args): n = 0 for i in args: n+=i return n print(sum(1,2)) print(sum(1,2,3)) print(sum(1,2,3,4)) def func(**kwargs): print(kwargs) func(a = 1,b = 2,c =3) func(a = 1,b = 2) func(a = 1)
动态参数:
def func(*args) 接受多个参数,内部自动构造元组,序列前加*,避免内部构造元组
def func(**kwargs) 接收多个参数,内部自动构造字典,序列前加**,直接传递字典
def func(*args,**kwargs):接受多个参数,既可以自动构造元组,又可以自动构造字典。
def func(*args,default = 1,**kwargs): print(args,kwargs) func(1,2,3,4,5,default=2,a = 'aaaa',b = 'bbbb',) def func1(*args):#站在形参的角度上,给变量加上*,就是组合所有传来的值。 print(args) func1(1,2,3,4,5) l = [1,2,3,4,5] func1(*l) #站在实参的角度上,给一个序列加上*,就是将这个序列按照顺序打散 def func2(**kwargs): print(kwargs) func2(a=1,b=2) d = {'a':1,'b':2} #定义一个字典d func2(**d)