Python基础-函数基础知识点

例1

def dylc():              #dylc--打印楼层
    print('1楼 化妆品')
    print('2楼 男女服装')
    print('3楼 儿童乐园')
    print('4楼 美食广场')
    print('5楼 万达影城')
floor=int(input('请输入楼层:'))
if floor==1:
    print('万达广场1楼欢迎您!')
    dylc()
    print('您现在在1楼')
elif floor==2:
    print('万达广场2楼欢迎您!')
    dylc()
    print('您现在在2楼')
elif floor==3:
    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(c)        #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 n==1 or n==2:
        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:x*2+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(c)

在这里插入图片描述
取最终值i=30,前面的函数都没有调用,所以i=30(debug一下!)

i=1
def a(x):
    print(x*i)
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:x*i for i in range(3)]         #下一行代码之前,x*i没有执行调用,所以i取最终值,i=2
print(a[0](3))
print(a[1](3))
print(a[2](3))

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Liang_Ren_/article/details/87913292