函数;递归;全局变量局部变量等顺序;匿名函数

练习

data1=int(input('请输入第一个数:'))
data2=int(input('请输入第二个数:'))
sum=0
a=[]
for i in range(data1,data2):
    j=2
    while i>j:
        if i%j==0:
            break
        j+=1
    else:
        a.append(i)
        sum += i
print(a)
print('和为:',sum)
k = 0
while k < len(a):
    if k == 0:
        max = a[k]
        min = a[k]
    else:
        if a[k] > max:
            max = a[k]
        elif a[k] < min:
            min = a[k]
    k += 1
print('最大值:', max, '最小值:', min)

输出:
结果
函数

def dylc():                             # 定义函数  :def 函数名():
    print('1楼 化妆品')
    print('2楼 女装')
    print('3楼 男装')
    print('4楼 电子产品')
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楼')

输出

def jiafa(a,b):          #定义一个带参数的函数  a,b为参数(形参)
    c=a+b                # c 为运算的结果
    print('%d + %d = %d'%(a,b,c))       #输出计算结果
jiafa(39,2)             #调用函数   (实参)

输出
在这里插入图片描述

返回值 return  没有return的返回None
def sum(a,b):
    sum=a+b
    return  sum
x=sum(3,7)
if x>10:
    print('和为:%d'%x,'>10奖励')
else:
    print('不打折')

输出:
在这里插入图片描述
在这里插入图片描述
返回多值

def jisuan(a,b):
    c=a+b
    d=a-b
    e=a*b
    f=a/b
    return c,d,e,f
x=jisuan(6,9)    #返回的是一个元组
print(x)

c,d,e,f=jisuan(6,9)      #返回的是数值
print(c,d,e,f)

输出:
在这里插入图片描述
函数值不可变

def hs(a):
    a+=2
b=4
hs(b)
print(b)

输出
在这里插入图片描述

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

输出
在这里插入图片描述

关键字参数

def pt(name,age,sex):
    print('我叫',name)
    print('年龄',age)
    print('性别',sex)
pt(sex='女',name='张三',age=23)

输出:
在这里插入图片描述

默认参数

def pt(name,age,sex='男'):      # 男为默认参数
    print('我叫',name,end='\t')
    print('年龄',age,end='\t')
    print('性别',sex)
pt('李雷',23)
pt('韩梅梅',18,sex='女')
pt('小明',30,sex='男')

输出
在这里插入图片描述
#可变参数

def pt(*args):         # 带一个*arge的是可变参数
    print(args)
    for i in args:
        print(i,end=' ')
    print()
pt(1,2,3)
pt('a','d',3,6,'s','f')

输出:
在这里插入图片描述

def sxh(**kwargs):
    print(kwargs)
    for k,v in kwargs.items():
        print(k,v,end=' ')
    print()
sxh(name='张三',age=18,sex='男')
sxh(name='小明',age=20,sex='女',address='北京')

输出
在这里插入图片描述

逻辑错误

def sxh(a,b,s=[]):   
                  #这种输出时会有逻辑错误,无语法错误,这种时更改会影响其他的使用
    s.append('x')      #想要的结果为  :1,2,x     和 10,2,x
    print(a,b,s)          #而实际输出的为:1,2,x   和 10,2,x,x
sxh(1,2)
sxh(10,2)

输出
在这里插入图片描述
python函数可以内部调用,其他语言则不可以—嵌套

def waibu():
    print('1111')
    def neibu():
        print('222')
    neibu()
waibu()

输出
在这里插入图片描述
全局变量和局部变量:函数里定义的是局部变量;函数外定义的是全局变量
局部变量走完,再走全局变量

a=0
def hs():
    a=2
    print(a)
hs()
print(a)

输出:
在这里插入图片描述

   a=[]
    def hs():
        a.append(1)
    hs()
    print(a)

输出
在这里插入图片描述
全局变量和局部变量优先选取局部变量,可以读取全局变量但不可使用

a=3
def hs():
    a+=5       #程序报错: 在使用局部变量时,并没有定义所使用的 a 的值
hs()
print(a)

输出
在这里插入图片描述

修改:
a=3
def hs(a):      # 选取的是全局变量的a
    a+=5
    print(a)
hs(a)
print(a)

输出
在这里插入图片描述

  a=3
    def hs():
        print(a)      #内部找不到到外部去找 使用全局变量a=3 输出3
    hs()
    print(a)          #输出的是函数外的全局变量 a=3

输出
在这里插入图片描述

global ** :声明使用的是全局变量

  a=3
    def hs():
        global a            #使用全局变量
        a=5                    #重新对使用的全局变量进行赋值
        print(a)
    hs()
    print(a)

输出
在这里插入图片描述
nonlocal 非全局的外部声明使用

 def wb():
        a=3
        def nb():
            nonlocal a
            a=4
        print(a)
        nb()
        print(a)
    wb()

输出
在这里插入图片描述
LEGB:
L->LOCAL: 局部作用域
E->ENCLOSE:嵌套作用域
G->GLOBAL:全局作用域
B->BUILT-IN: 内置作用域

  c=98
    def wb():
        d=39
        e=67
        def nb():
            e=34
            print(e)    #LOCAL
            print(d)    #ENCLOSE
            print(c)    #GLOBAL
            print(max)   #BUILT-IN
        nb()
    wb()

输出
在这里插入图片描述
递归:

def jiacheng(n):
    if n==1:
        return 1
    else:
        return n*jiacheng(n-1)
print(jiacheng(6))

输出
在这里插入图片描述

#斐波那契数列

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))

输出
在这里插入图片描述
匿名函数

x=lambda  x:2*x+5
print(x(2))

输出

 y=lambda  a,b:a+b/2
    print(y(10,4))

输出
在这里插入图片描述

a={'name':'小明','age':19,'address':'北京'}
x=lambda b:b['name']
print(x(a))

输出
在这里插入图片描述

a=(2,45,-98)
b=max(a,key=abs)   #abs()取绝对值   key=   表示取最大值的标准
print(b)

输出
在这里插入图片描述
a=[2,-1,5,0,23,-7]
a.sort(key=abs) #以绝对值的大小来进行排序
print(a)
输出
在这里插入图片描述
a=[
{‘name’:‘小明’,‘age’:23,‘address’:‘北京’},
{‘name’:‘小红’,‘age’:18,‘address’:‘海南’},
{‘name’:‘小张’,‘age’:25,‘address’:‘丹东’},
{‘name’:‘小李’,‘age’:30,‘address’:‘云南’}
]
b=max(a,key=lambda x:x[‘age’])
print(b)
输出
在这里插入图片描述
在开始的时候函数是没有被调用的,所以i以最后的值为准

i=10
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没有被赋值之前不执行lambda的函数体,而当x被赋值是i为最后一次的值
print(a0)
print(a1)
print(a2)
输出
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yue_lw/article/details/87915968