python学习记录10---------------函数

函数:

def 函数名(变量名1,变量2.。。):

  函数体

-----------------------------------------------函数名---------------------------------

函数名相当于一个变量,保存的是函数对象在内存中的地址

def func(a,b):#函数名:func
return a+b #函数体
#1、函数名赋值,此时add函数相当于func函数
# add = func
# print(add(1,2)) #打印3
#2、函数名可以当做形参
# def add(a,b,f):
# return f(a,b*2)+f(a*2,b)
# print(add(1,2,func))#相当于func(1,2*2)+func(1*2,2)=9
def func(a,b):#函数名:func
return a+b #函数体
#3、当做函数的返回值
def add():
return func
print(add()(1,2))#相当于func(1,2)=3

----------------------------------------------------------------------------------------------------

在 python 中,类型属于对象,变量是没有类型的:

a=[1,2,3]

a="Runoob"
[1,2,3]是列表类型,
"Runoob"是字符串string类型。a是变量,没有类型,它只是一个对象的引用,可以指向list类型,也可以指向string类型

---------------------------------------------函数的注意点--------------------------

a=1 #a指向1

a=2#当a再次赋值2时,a指向2所在的内存。

-------------------------------------------------------------------------------------------------------

python中,函数的参数传递性:

1、不可变类型:整型、字符串、元组;当这类参数作为函数的参数传值时,是将变量的指向传递给参数,不会影响变量本身,如下例,当b=1传给fuzhi(b)时,并不会改变b的值

def fuzhi(a):

  a=2

b=1

fuzhi(b);print(b)#还是打印1

2、可变类型:类似 c++ 的引用传递,如 列表,字典。如myappend(l),则是将 l指向的值真正的传过去,修改后myappend外部的l也会受影响

def myappend(List):
List.append([3,4])
print("函数内改变List值:",List)
l = [1,2]
myappend(l) #函数内改变List值: [1, 2, [3, 4]]
print("函数外改变l值:",l) #函数外改变l值: [1, 2, [3, 4]]

--------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------参数----------------------------------------------------------------------

参数分类:

1、必须参数(参数数量要一致)

必须按照定义时正确是参数顺序传入函数,参数数量必须相同

2、关键字参数(调用函数时,参数使用函数命名时的参数,此时参数顺序可变)

1 def info(name,sex,age):
2     print("name:",name)
3     print("sex:",sex)
4     print("age:",age)
5 info(age=11,name="fangxs",sex="man")#调用函数时,参数使用命名时的参数名,顺序可变

3、默认参数()

定义函数时,参数可以有默认值,但是必须在函数参数的最后。

1 def info(name,sex,age=18):#age必须要放置在没有默认值参数之后(name,sex)
2     print("name:",name)
3     print("sex:",sex)
4     print("age:",age)
5 info(name="fangxs",sex="man")#age有默认值,调用函数时可以不给age传值,打印时,age=18

4、不定长参数(带*为元组存放参数,带**为字典)

def tuple(str,*num):
    print("random:",str)
    print(num)
tuple("begin",1,2,3,4,5,6) #打印begin (1,2,3,4,5,6)
1 def tuple(str,**num):#字典来存储
2     print("random:",str)
3     print(list(num.values()))
4 tuple("begin",name="fangx",age=18,sex="super man")#采用key=value在输入

 定义函数时,若参数单独出现【 * 】意味着 * 之后的参数必须用关键字传值

def add(a,b,*,c):
    print(a+b+c)
add(1,2,c=3)#*之后的参数c 必须用关键字传值

--------------------------------------------------匿名函数 lambda--------------------

所谓匿名,无需使用 def 语句定义函数,而用:

定义:函数名 = lambda 参数:参数表达式

1 info = lambda name,age:print(name,age)
2 info("fangxs",18)

 -------------------------------------------------返回值 return---------------------------------------------

 1、如果函数体没有return,默认返回None

2、可以返回多个对象,python会将所有的对象组成一个元组对象返回



 



posted @ 2019-10-10 20:26  fangxs666  阅读(261)  评论(0编辑  收藏  举报