函数

来源:互联网 发布:网络开盘抢房技巧 编辑:程序博客网 时间:2024/05/29 12:29
1函数 
函数是组织好的,可重复使用,用来实现单一或者相关联功能的代码段。Print也是一个函数
2 语法:(函数先要定义才能调用)
def 函数名(参数列表)
   函数体  
例如:def test1()      [def表示定义一个函数,test1是函数名]
      Print(“hello”)[这一行表示 test1这个函数的作用 也就表test1()        示这个一旦调用这个函数就会输出hello]
【最后一行表示调用这个函数 也就是前面函数名后面小括号】
 带参数的函数例如;
def add(a,b)(这句话表示定义一个叫add的函数,里面有a和b参数)
print(a+b)   (这句话表示这个参数用于计算a+b的合)
add(11,10)  (这句话表示调用这个add的函数,a=11,b=10)
3  返回值:return  xxx(可以有返回值也可以没有)
(可以返回多个值,返回多个值组成一个元组,返回值加上一对中括号,则返回一个列表)
带返回值的函数:例如:
def add(a,b):
   return a+b
sum=add(11,22)
表示sum等于a+b的合
再输出sum就是33
函数直接返回一个结果 之后再处理这个结果
一旦函数中遇到return表示此函数结束,所以return后面写语句是没用的
4 python里的参数有 1不可变参数  2关键字参数 3默认参数 4不定长参数。
5 关键字参数:关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict
例如:**kw和*kw










1 一个*的参数例如:
def calc(*numbers):  
sum=0
for n in numbers:  
    sum=sum+n*n
return sum
abc=calc(1,2,4,5)
print(abc)
(既然可以循环这个参数,表示这个参数是一个元组或者列表,因为是这个参数是一个元组或者列表所以传回去的参数也可以是一个列表所以是(1,2,4,5),因为有返回值return所以要给一个值abc=calc。然后再输出abc就是得到的是第一次n等于1也就是
0+1*1第二次n=2 也就是0+1*1+2+2+4*4+5*5 最后是46) 
总结 *abc表示就是会把传回来的参数都归纳到abc然后形成一个元组,然后就可以遍历这个元组进行计算。一个*的关键字参数传值时可以传一系列的值也可以将一个元组或列表传进去,但是需要在前面*,关键字参数要写在后面,可以不传参
 


2.两个*的参数,一个*的参数传的是元组或者列表,而两个*传的就是字典,例如:


def abc(name,age,**kw)
   print(“name:”,name,”age:”,age,”other:”,kw)
abc(“frank”,”37”)
(第一句表示建立一个名叫abc的函数,里面有三个参数是name,age,**kw)
(第二句话表示当调用这个abc函数的时候会输出name的值,age的值,other的值。第三句话是将frank和37分别传给了name和age,other没有值就是一个空的大括号)
这样输出的结果就是
name: frank age: 37 other: {}
因为第三个参数kw没有传参数 所以other是个空的字典。
如果要给**kw传参数必须用键值对的方式例如city=“shanghai”这样的方式才可以,后面不管传多少键值对都给**的参数,这种参数为关键字参数, 可以不传参可以传多个,如果穿参必须传键值对类型的参数。也可以提前定义一个字典直接传过去。
3 默认参数:
默认参数必须写在后面,可以不指定参数名,但是顺序要保证,否则要指定参数名(先是默认参数然后是*参数然后是**参数)
默认参数一定要用不可变对象,如果是可变对象,程勋运行时会有逻辑错误!
例如:
Def abc(sex=None):
    Print(sex)
Abcd(“male”)
也可以指定例如:


Def abc(uname,sex=None)
      Print(sex)
Abc(45,sex=“male”)
这样表示45传给了uname,male传给了sex
如果只传一个参数也可以 那就是给了uname一个参数因为sex
 默认值None所以不传参数也可以


4 组合参数例如:
在python中定义函数,可以用必选参数,默认参数,可变参数,关键字参数和命名关键字参数,这五种参数都可以组合使用,除了可变参数无法和命名关键字参数混合。但是请注意,参数定义的顺序必须是:必选参数,默认参数,可变参数,命名关键字参数和关键字参数
def zuhe(a,b,c=0,*abc)
   print(a,b,c,abc)
def(1,2,3,4,5)
(表示1对应a,2对应b,3对应c,abc是一个列表或者元组所以45全部对应abc形成一个新的元组)
输出结果就是1 2 3(4,5)
5 可变对象与不可变对象
可变(mutable)与不可变(immutable)对象
在python中,strings,tuples和numbers是不可更改的对象,而list,dict则是可以修改的对象。
不可变类型:变量赋值a=5后再赋值a=10,这里实际是新生成一个int值对象10,再让a指向它,而5被丢弃,不是改变a的值,相当于新生成了a






总结:
Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。
默认参数一定要用不可变对象,如果可变对象,程序运行时会有逻辑错误!
要注意定义可变参数和关键字参数的语法:
*args是可变参数,args接收的是一个tuple(元组)
**kw是关键字参数,kw接受的是一个dict   (字典)