Python基础学习笔记(4)

函数

  • 一块具有独立功能的代码块,重复使用,那么往往就需要使用函数,使用函数把这款代码封装成一个整体

定义函数

def 函数名():
    函数代码

[root@lUsmwg108555 python]# cat function 
#!/root/.pyenv/shims/python3 
#输出系统提示信息

def printinfo():
    userlist=[]
    print("="*40)

    print("		欢迎进入学生管理系统")
    print("1: 添加一名学生的名字")
    print("2: 删除一名学生的名字")
    print("3: 修改一名学生的名字")
    print("4: 查找一名学生的名字")
    print("5: 遍历当前所有名字")
    print("0: 退出系统")

    print("="*40)

[root@lUsmwg108555 python]# ./function 
[root@lUsmwg108555 python]# 

注:定义一个函数的时候,这个函数不会自动执行

调用函数

函数名()

注:函数只需定义一次,即可调用N次

[root@lUsmwg108555 python]# ./function 
========================================
	      欢迎进入学生管理系统
1: 添加一名学生的名字
2: 删除一名学生的名字
3: 修改一名学生的名字
4: 查找一名学生的名字
5: 遍历当前所有名字
0: 退出系统
========================================
[root@lUsmwg108555 python]# cat function 
#!/root/.pyenv/shims/python3 
#输出系统提示信息

def printinfo():
    userlist=[]
    print("="*40)

    print("		欢迎进入学生管理系统")
    print("1: 添加一名学生的名字")
    print("2: 删除一名学生的名字")
    print("3: 修改一名学生的名字")
    print("4: 查找一名学生的名字")
    print("5: 遍历当前所有名字")
    print("0: 退出系统")

    print("="*40)

printinfo()

[root@lUsmwg108555 python]# 

函数的文档说明

在交互模式下,可以定义函数相关文档通过help查看说明

>>> def mytest ():
...     print ("haha")
... 
>>> help(mytest)

Help on function mytest in module __main__:

mytest()
(END) 

>>> def mytest1():
...     "测试信息--函数说明"
...     print("hehe")
... 
>>> help(mytest1)
Help on function mytest1 in module __main__:

mytest1()
    测试信息--函数说明
(END) 

函数的参数

[root@lUsmwg108555 python]# cat 4-1 
#!/root/.pyenv/shims/python3
def Numsum(i,j):
    print(i+j)

i=int(input("请输入需要相加的第一个数:"))
j=int(input("请输入需要相加的第二个数:"))
Numsum(i,j)

[root@lUsmwg108555 python]# ./4-1 
请输入需要相加的第一个数:12
请输入需要相加的第二个数:32
44

函数返回值 return

  • 一个函数执行完后,把一个结果返回给调用者

[root@lUsmwg108555 python]# ./4-1 
请输入第一个相加的数:22
请输入第个相加的数:11
33
[root@lUsmwg108555 python]# cat 4-1 
#!/root/.pyenv/shims/python3
def Numsum(i,j):
    return i+j

i=int(input("请输入第一个相加的数:"))
j=int(input("请输入第个相加的数:"))

result = Numsum(i,j)
print(result)

[root@lUsmwg108555 python]# 
  • return 在将结果返回给调用者后,即终止函数
    同时,如果一个函数中编写多个return,那么程序不会出现语法错误,原因是第一个return被执行后,这个函数就结束了,所有接下来的return都不会被执行

[root@lUsmwg108555 python]# ./4-1 
请输入第一个相加的数:22
请输入第个相加的数:11
-------- 1 --------
33
[root@lUsmwg108555 python]# cat 4-1 
#!/root/.pyenv/shims/python3
def Numsum(i,j):
    print("-------- 1 --------")
    return i+j
    print("-------- 2 --------")
    return i*j
    print("-------- 3 --------")
    return i-j

i=int(input("请输入第一个相加的数:"))
j=int(input("请输入第个相加的数:"))

result = Numsum(i,j)
print(result)
[root@lUsmwg108555 python]# 

函数的 4 中类型 return

函数根据有没有参数,有没有返回值,可以进行相互组合


  • 无参数,无返回值
  • 无参数,有返回值
  • 有参数,无返回值
  • 有参数,有返回值

函数模块化 - 学生管理系统

[root@MiWiFi-R3-srv python]# cat 04-system
#!/root/.pyenv/shims/python3
#coding=utf-8

#打印功能提示信息
def printMenu():
    print("="*40)

    print("		欢迎进入学生管理系统 v1.0")
    print("1: 添加一名新学生的信息")
    print("2: 删除一名学生的信息")
    print("3: 修改一名学生的信息")
    print("4: 查找一名学生的信息")
    print("5: 遍历当前所有学生信息")
    print("0: 退出系统")

    print("="*40)
#添加一个学生信息
def addStuInfo():
    newName=input("请输入新学生的姓名:")
    newSex=input("请输入新学生的性别 男\女:")
    newPhone=input("请输入新学生的电话号码:")
    newInfo={}
    newInfo['name']=newName
    newInfo['sex']=newSex
    newInfo['phone']=newPhone
    StuInfo.append(newInfo)

def changeStuInfo():
    stuID=int(input("请输入需要修改的学生的序号:"))
    addStuInfo()
    StuInfo[stuID-1]['name']=newName
    StuInfo[stuID-1]['sex']=newSex
    StuInfo[stuID-1]['phone']=newPhone

StuInfo=[]
while True:
    printMenu()
    #获取用户操作信息
    num=input("请输入您需要操作的序号:")

    #执行判断
    if num=="1":
	    #添加学生信息
	    addStuInfo()

    elif num=="2":
	    stuID=int(input("请输入需要删除的学生的序号:"))
	    del StuInfo[stuID-1]
    elif num=="3":
	    #修改学生信息
	    changeStuInfo()
    elif num=="4":
	    #获取需查找的学生姓名
	    stu=input("请输入学生的名字:")
	    print("序号		姓名		性别		电话")
	    i=1
	    for stu in StuInfo:
		    print("%d		%s		%s		%s"%(i,stu['name'],stu['sex'],stu['phone']))
		i+=1
	    else:
		    print("查无此人")
    elif num=="5":
	    print("-"*30)
	    print("序号		姓名		性别		电话")
	    i=1
	    for stu in StuInfo:
		    print("%d		%s		%s		%s"%(i,stu['name'],stu['sex'],stu['phone']))
		    i+=1
    elif num=="0":
	    break

[root@MiWiFi-R3-srv python]# 

函数调用

[root@MiWiFi-R3-srv python]# cat def 
#!/root/.pyenv/shims/python3

#定义函数

def testA():
    print("---- A start ----")
    testB()
    print("---- testA ----")
    print("---- A end ----")

# 函数不能重名,重名默认最后定义的函数生效
#def testA()
def testB():
    print("---- test B ----")

testA()
testC()

#函数调用需将函数定义在前面,定义在后面,前边调用不到会BUG
def testC():
    print("---- test C ----")

[root@MiWiFi-R3-srv python]# 

[root@lUsmwg108555 python]# cat sum 
#!/root/.pyenv/shims/python3
def Sum(a,b,c):
    sum=a+b+c
    return sum

def average3Num(A,B,C):
    average=Sum(A,B,C)/3
    return average	


#result=Sum(11,22,33)
result=average3Num(11,22,33)
print(result)

[root@lUsmwg108555 python]# 
22.0
[root@lUsmwg108555 python]# 

缺省参数

调用函数时,缺省参数的值如果没有传入,则被认为是默认值

[root@lUsmwg108555 python]# cat 缺省参数 
#!/root/.pyenv/shims/python3
'''
def test(a,b,c):
    print(a)
    print(b)
    print(c)

test(11,22,33)
'''
print("-"*40)


def test(a,b,c=5.2):
    print(a)
    print(b)
    print(c)

test(11,22)

[root@lUsmwg108555 python]# 

不定长参数

[root@lUsmwg108555 python]# cat 不定长参数 
#!/root/.pyenv/shims/python3
#coding=utf-8

def test(a,b,*args,**kwargs):
    print(a)
    print(b)
    print(args)
    print(kwargs)


test(11,22,33,44,55,aa=10086,bb=10000)
[root@lUsmwg108555 python]# ./不定长参数 
11
22
(33, 44, 55)
{'aa': 10086, 'bb': 10000}
[root@lUsmwg108555 python]# 

引用 global

可变类型:列表、字典
不可变类型:元组、数字、字符串
当全局变量调用需要修改时 需要先global声明

[root@lUsmwg108555 python]# cat global 
#!/root/.pyenv/shims/python3

g_a=100
g_list=[11,22]

def test():
    global g_a
    g_a+=2           #当为不可变类型时需要global声明
    print(g_a)
    g_list.append(33)  #当为可变类型时可直接修改
    print(g_list)
test()
[root@lUsmwg108555 python]# 

a=a+a 和 a+=a 在引用时有点不一样

>>> a=100
>>> b=a
>>> b
100
>>> id(a)
8756032
>>> id(b)
8756032
>>> a=a+1
>>> a
101
>>> b
100
>>> a=a+a
>>> a
202
>>> b
100
>>> a=["123","321","haha"]
>>> b=a
>>> a
['123', '321', 'haha']
>>> b
['123', '321', 'haha']
>>> a.append("hehe")
>>> b
['123', '321', 'haha', 'hehe']
>>> a
['123', '321', 'haha', 'hehe']
>>> id(a)
139723197547336
>>> id(b)
139723197547336
>>> a=a+a
>>> a
['123', '321', 'haha', 'hehe', '123', '321', 'haha', 'hehe']
>>> b
['123', '321', 'haha', 'hehe']
>>> a=b
>>> a
['123', '321', 'haha', 'hehe']
>>> b
['123', '321', 'haha', 'hehe']
>>> id(a)
139723197547336
>>> id(b)
139723197547336
>>> a+=a
>>> a
['123', '321', 'haha', 'hehe', '123', '321', 'haha', 'hehe']
>>> b
['123', '321', 'haha', 'hehe', '123', '321', 'haha', 'hehe']
>>> 

递归

一个函数调用了它本身,那么这样的函数就叫做递归

[root@lUsmwg108555 python]# cat digui 
#!/root/.pyenv/shims/python3
'''
def sum(num):
    sum=0
    i=1
    while i<=num:
	    sum = sum+i
	    i+=1
    return sum
result=sum(10)
print(result)
'''

def product(num):
    if num > 1:
	    return num*product(num-1)
    else:	
	    return 1

result=product(10)
print(result)
#print(product(4))
[root@lUsmwg108555 python]# 

匿名函数

lambda函数能接收任何数量的参数,但只能返回一个表达式的值,
匿名函数不能直接调用print,因为lambda需要一个表达式

[root@lUsmwg108555 python]# cat lambda 
#!/root/.pyenv/shims/python3
'''
def test(a):
    return a+1

aaaa=lambda a:a+1
print(test(11))
print(aaaa(8))
'''

def test(a,b,c):
    return a+b+c

sum=lambda a,b,c:a+b+c
print(test(11,22,33))

[root@lUsmwg108555 python]# 

>>> a.sort(reverse=True)
>>> a
[56, 44, 34, 24, 23, 15, 14, 11, 2]
>>> a.sort()
>>> a
[2, 11, 14, 15, 23, 24, 34, 44, 56]
>>> b=[{"num":11,"age":50},{"num":40,"age":25},{"num":23,"age":22},{"num":33,"age":11}]
>>> b
[{'age': 50, 'num': 11}, {'age': 25, 'num': 40}, {'age': 22, 'num': 23}, {'age': 11, 'num': 33}]
>>> help(b.sort())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: dict() < dict()
>>> help(b.sort)

>>> b.sort(key=lambda x:x['num'])
>>> b
[{'age': 50, 'num': 11}, {'age': 22, 'num': 23}, {'age': 11, 'num': 33}, {'age': 25, 'num': 40}]
>>> b.sort(key=lambda x:x['age'])
>>> b
[{'age': 11, 'num': 33}, {'age': 22, 'num': 23}, {'age': 25, 'num': 40}, {'age': 50, 'num': 11}]
>>> b.sort(key=lambda x:x['age'],reverse=True)
>>> b
[{'age': 50, 'num': 11}, {'age': 25, 'num': 40}, {'age': 22, 'num': 23}, {'age': 11, 'num': 33}]
>>> 
comments powered by Disqus