函数
#函数的定义
def hanshu(a,b):
c=a+b
return(c)
x=hanshu(1,2)
print(x) #结果:3
a=5
def hanshu():
return 5+a
a=6
def hanshu1():
return 5+a
a=7
def hanshu2():
return 5+a
print(hanshu()) #12
print(hanshu1()) #12
print(hanshu2()) #12
#这里a最后的赋值是7,最后打印的时候才走return,所以都是5+7=12
#形参实参
def func(a,b): #a,b就表示形参
c=a+b
return c
x=func(1,2) #这里的1,2与下面的3,4都代表的实参
y=func(3,4)
print(x,y)
#位置参数与关键字参数
def people(name,age,sex):
print("我叫",name)
print("年龄",age)
print("性别",sex)
people("张三",19,"男")#位置参数必须一一对应
print()
people(sex="女",name="李四",age=29)#关键字参数k-v相互对应,所以,对位置没有要求
#关键字参数必须放在位置参数后面
def hanshu(a,b):
c=a+b
return c
x=hanshu(5,b=7)#关键字参数在位置参数后面所以可以正常运行
print(x)
# y=hanshu(a=5,7) #报错:SyntaxError: positional argument follows keyword argument
print(y)
#默认参数
def student(name,age,sex="男"):
print(name,age,sex)
student("张三",19,"女") #结果:张三 19 女
student("李四",20) #结果: 李四 20 男
#在李四这一栏里并没有输入性别,但最后的结果会出现性别,就是因为在定义的时候已经默认了性别是男,
# 如果后面参数中没有写性别,则使用默认的性别,写的话就使用写的性别
#另外注意默认的参数一定要放在最后面
*# 具有打散序列的功能
def func(a,b,c):
print(a,b,c)
tup=(1,2,3)
func(*tup)#结果:1 2 3
tup=(1,2,3,4)
print(*tup) #结果:1 2 3 4
list=[1,2,3,4]
print(*list) #结果:1 2 3 4
str="asdfg"
print(*str) #结果:a s d f g
def kb(a,b,*c):
print(a)
print(b)
print(c)
kb(1,2,3,4,5,6,7)
**# 结果:
1
2
(3, 4, 5, 6, 7)
kb(1,2)
# 结果:
1
2
()
#定义字典
def kb(a,**kwargs):
print(a,kwargs)
kb(1,name="张三",age=19,sex="男")
kb(2,name="李四",age=20,id=1001)
kb(3)
#结果
1 {'name': '张三', 'age': 19, 'sex': '男'}
2 {'name': '李四', 'age': 20, 'id': 1001}
3 {}
def func(name,age):
print(name,age)
a={"name":"张三","age":19}
func(**a) #结果:张三 19
def jisuan(a,b):
i=0
while i<3:
a=a+b
return a
i+=1
return 10
x=jisuan(2,3)
print(x) #结果:5 return具有结束的功能,因此只运行一次循环就结束了
def hanshu(a,b):
c=a+b
return c
d=a-b
return d
x=hanshu(2,3)
print(x) #结果:5
#return具有结束的功能,因此d=a-b不运行
#阶乘
def jiecheng(n):
if n==1:
return 1
else:
return(n*jiecheng(n-1))
x=jiecheng(5)
print(x) #结果:120
#斐波那契
def fbnq(n):
if n==1 or n==2:
return 1
else:
return fbnq(n-1)+fbnq(n-2)
for x in range(1,11):
print("第",x,"个月兔子的个数是",fbnq(x))
#二分查找
def zbcz(a,start,end,key):
mid=(start+end)//2
if a[mid]==key:
return mid
elif a[mid]>key:
return zbcz(a,start,mid-1,key)
elif a[mid]<key:
return zbcz(a,mid+1,end,key)
a=[1,2,3,4,5,6,7]
print(zbcz(a,0,len(a)-1,5))
#作业
# 练习传递参数
# 1、写一个函数实现斐波那契数列(1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377…)
# 要求:接收一个参数,返回一个存着等量值的列表
def func(num):
a=1
b=1
if num<=2:
print(a,a+b,end=" ")
else:
while num>0:
print(b,end=" ")
a,b=b,a+b
num-=1
func(10)
print()
# 2.计算任意多个数字的和
# 需求
# (1).定义一个函数 sum_numbers,可以接收的 任意多个整数
# (2).功能要求:将传递的 所有数字累加 并且返回累加结果
def sum_numbers(*args):
num=0
for x in args:
num+=x
return num
print(sum_numbers(1,2,3))
# 3.使用递归,计算 1 + 2 + … num 的结果
def sum_numbers(num):
if num==1:
return 1
else:
num =num+sum_numbers(num-1)
return num
print(sum_numbers(5))