python基础——函数(自定义函数)

定义函数
函数代码块以def开头,后接函数标识符名称和();
任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。

def 函数名(参数列表):
函数体
def area(width,height):
    return width*height
w=float(input("宽:"))
h=float(input("高:"))
print("",w,"",h,"面积 ",area(w,h))

return

return [表达式] 结束函数,选择性地返回一个值给调用方。
不带return相当于返回 None。
函数中,一旦执行return,函数执行过程立即终止。
def sum1(arg1,arg2):
   total=arg1+arg2
   print ("函数内 : ",total)
   return total
def sum2(arg1,arg2):
   total=arg1+arg2
   print ("函数内 : ",total)
print ("函数外 : ",sum1(10,20))
print ("函数外 : ",sum2(10,20))

 

函数调用
python中必须先定义再调用

参数
1、普通参数
严格按照顺序,将实际参数赋值给形式参数。
def printinfo( name, age ):
   print ("名字: ", name)
   print ("年龄: ", age)
   return
printinfo("ss",40)
2、默认参数
调用函数时,如果没有传递参数,则会使用默认参数。
默认参数必须放在参数列表最后。
def printinfo(name,age=35):
   print ("名字: ",name)
   print ("年龄: ",age)
   return
printinfo("ss")
3、指定参数
将实际参数赋值给形式参数
def printinfo( name, age ):
   print ("名字: ", name)
   print ("年龄: ", age)
   return
printinfo( age=50, name="ss" )
4、动态参数
形式参数加*,多个实际参数作为一个元组传入函数。
def printinfo( *name ):
   print ("名字: ",name)
printinfo( "aa","bb", 60, 50 )
l=[11,22,"cc"]
printinfo(l)    #列表作为元组的单一元素
printinfo(*l)   #列表中每一个元素作为元组的一个元素
形式参数加**,多个实际参数作为一个字典传入函数。
函数调用时必须用指定参数形式,同时存在key和value
def printinfo( **name ):
   print (name)
printinfo( name1="aa",name2="bb",name3=11 )
d={"n1":"cc","n2":"dd"}
printinfo(**d)
两种方式共用,*在前,**在后。
def printinfo( *name1,**name2 ):
   print (name1)
   print (name2)
printinfo( "ss","cc",n1="aa",n2="bb",n3=11 )
参数传入函数的是引用,函数中改变的是参数原值
def f1(a):
    a.append(999)
l=[11,22,33]
f1(l)
print(l

变量作用域

变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。
全局变量:定义在函数外的,可以在整个程序范围内访问。
局部变量:定义在函数内部的,只能在其被声明的函数内部访问。
调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。
全局变量和局部变量名相同时,优先用局部变量。
total=0     #全局变量
def sum(arg1,arg2):
    total=arg1+arg2     #局部变量
    print("函数内局部变量:",total)
    return total
sum(10,20)
print("函数外全局变量:",total)
函数中对全局变量重新赋值用"global 变量名"的方式。
NAME="global_ss"    #全局变量用大写
def f1():
    age=18
    global NAME
    NAME =123
    print(NAME,age)
def f2():
    age=19
    print(NAME,age)
f1()
f2()

 

lambda表达式
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
def f1(arg)
    return arg+100

f2=lambda arg: arg+100  #冒号前是参数,冒号后是表达式,自动return表达式的结果。

f3=lambda a1,a2: a1+a2
print(f3(2,4))

 


 
posted @ 2016-08-25 21:05  沄持的学习记录  阅读(305)  评论(0)    收藏  举报