python的函数基础知识点

例1

def dylc(): #dylc–打印楼层
print(‘1楼 化妆品’)
print(‘2楼 男女服装’)
print(‘3楼 儿童乐园’)
print(‘4楼 美食广场’)
print(‘5楼 万达影城’)
floor=int(input(‘请输入楼层:’))
if floor1:
print(‘万达广场1楼欢迎您!’)
dylc()
print(‘您现在在1楼’)
elif floor
2:
print(‘万达广场2楼欢迎您!’)
dylc()
print(‘您现在在2楼’)
elif floor3:
print(‘万达广场3楼欢迎您!’)
dylc()
print(‘您现在在3楼’)
elif floor
4:
print(‘万达广场4楼欢迎您!’)
dylc()
print(‘您现在在4楼’)
elif floor==5:
print(‘万达广场5楼欢迎您!’)
dylc()
print(‘您现在在5楼’)

例2

def jiafa (a,b): #定义函数,求两个数的和,a,b为传入参数
c=a+b
print(’%d+%d=%d '%(a,b,c)) #输出计算结果
jiafa(3,4) #调用函数
jiafa(4,7)
jiafa(8,9)

例3

def qiuhe (a,b): #a,b形参,完成求和
c=a+b
return c #返回c
x=qiuhe(7,8) #调用求和函数将结果赋值给x
if x>10:
print(‘金额>10奖励’)
else:
print(‘不打折’)

例4

def jisuan (a,b):
c=a+b
d=a-b
e=a*b
f=a/b
return c,d,e,f
x=jisuan(4,5)
print(x)
a,b,c,d=jisuan(4,5)
print(a,b,c,d)

例5

def hs(a):
a+=2
b=4 #整数不可改变
hs(b)
print(b)

def kb(a): #函数定义
a.append(3) #列表里添加元素
b=[]
kb(b) #调用kb
print(b)

(1)必须参数

def pt(a,b):
print(a,b) #必须参数
pt(3,4)

(2)关键字参数

def pt(name,age,sex):
print(‘我叫’,name)
print(‘年龄’,age)
print(‘性别’,sex)
pt(sex=‘男’,age=‘25’,name=‘张三’) #关键字参数

(3)默认参数

def pt(name,age,sex=‘男’): #默认参数,sex=‘男’
print(‘我叫’,name,end=’\t’)
print(‘年龄’, age,end=’\t’)
print(‘性别’,sex)
pt(age=‘24’,name=‘李四’) #不给sex赋值的情况下输出的sex为默认参数值
pt(age=‘25’,name=‘张三’)
pt(sex=‘男’,age=‘34’,name=‘赵五’)
pt(sex=‘女’,age=‘27’,name=‘小红’) #赋值后为赋予的参数值

(4)可变参数
例1

def pt(*args): #可变参数
print(args)
for x in args: #展开元组
print(x,end=’ ')
print()
pt(1,2,3)
pt(1,2,3,4,5,6,6,7,7)

例2

def sxh(**kwargs):
print(kwargs)
for k,v in kwargs.items(): #字典
print(k,v,end=’ ')
print()
sxh(name=‘张三’,age=18,sex=‘男’)
sxh(name=‘小红’,age=23,sex=‘女’,address=‘北京’) #可变参数

默认参数用不可变对象,如果是可变对象,运行时会有逻辑错误

def sxh(a,b,d=[]):
d.append(‘x’)
print(d)
sxh(1,2)
sxh(3,4)

运行1次的时候已经输出d=‘x’
运行第二次的时候在原有的d=[‘x’’]里再添加一个’x’
运行时不会报错,但是为逻辑错误,如果中间修改,就会影响其他运行结果

函数的调用

def waibu():
print(‘1111’)
def neibu():
print(‘2222’)
neibu()
waibu()

a=0 #函数外面的变量为全局变量
def hanshu():
a=2 #函数内部的变量为局部变量
print(a)
hanshu()
print(a)

a=[]
def hanshu():
a.append(1) #可修改全局变量
hanshu()
print(a)

函数优先读取局部变量,能读全局变量,无法对全局变量重新赋值操作
错误示例

a=3
def hanshu(): #def hanshu(a) 同样会报错
a=a+1 #局部变量没有声明,’='相当于赋值,一个新的变量,所以会报错
hanshu() #hanshu(a) 同样会报错
print(a)

局部变量找不到,去全局变量里找,去掉a=4后不报错

global:声明为全局变量

a=3
def hanshu():
global a #声明为全局变量
a=5 #重新赋值,全局变量的值改变
print(a)
hanshu()
print(a)

nonlocal,外部变量(非全局变量)

def hanshu():
a=30
def neibu():
nonlocal a #外部变量(非全局变量)
a=40
print(a) #未调用函数,值为30
neibu()
print(a) #调用函数后,值为40
hanshu()

变量的查找顺序 从里向外查找
LEGB
L–LOCAL 局部作用域
E–ENCLOAE 嵌套作用域
G–GLOBAL 全局
B–BUILT-IN 内置
示例:

a=100
c=1
b=30
def waibu():
b=200
c=2
def neibu():
c=300
print© #LOCAL
print(b) #ENLCOSE
print(a) #GLOBAL
print(max) #BUILT-IN
neibu()
waibu()

例题:
求5!

def jiecheng(i):
if i==1:
return 1
else:
return i*jiecheng(i-1)
print(jiecheng(5)) #当jiecheng()时,就不出结果了

求斐波那契数列

def fbnq(n):
if n1 or n2:
return 1
else:
return fbnq(n-1)+fbnq(n-2)
for i in range(1,13):
print(‘第%d个月的兔子数量是:’%i,fbnq(i))

匿名函数
示例1:

x=lambda x:x2+3 #实参:函数体
print(x(10))
print(x(5))
y=lambda a,b:a
3+b
print(y(3,4))

示例2:

a={‘name’:‘linda’,‘age’:‘18’,‘address’:‘China’}
x=lambda b:b[‘age’]
print(x(a))

函数调用

a=[1,21,-23]
b=max(a,key=abs) #对a[]里每个数字进行取绝对值比较,求出最大值,abs为求绝对值函数
print(b)

a=[-2,-3,1,4,7,9]
a.sort(key=abs) #每个数都进行取绝对值,然后排列输出,a[]里的内容不改变
print(a)

a=[{‘name’:‘Linda’,‘age’:‘18’,‘address’:‘China’},
{‘name’:‘Jerry’,‘age’:‘24’,‘address’:‘England’},
{‘name’:‘Tom’,‘age’:‘23’,‘address’:‘America’},
{‘name’:‘Bob’,‘age’:‘28’,‘address’:‘China’}
]
c=max(a,key=lambda x:x[‘age’])
print©

取最终值i=30,前面的函数都没有调用,所以i=30(debug一下!)

i=1
def a(x):
print(xi)
i=20
def b(x):
print(x
i)
i=30
def c(x):
print(x*i)
a(3)
b(3)
c(3)

同上例题

a=[lambda x:xi for i in range(3)] #下一行代码之前,xi没有执行调用,所以i取最终值,i=2
print(a0)
print(a1)
print(a2)

猜你喜欢

转载自blog.csdn.net/Hql_ztz/article/details/89278367