19.4.28笔记and作业

笔记

地址

a='123'
b='123'
print(a==b)
print(a is b)##True,不可变类型的id相同,地址相同
print(id(a))#相同
print(id(b))#相同

a=3
b=a
b=6
print(a)

a=[1,2,3]
b=[1,2,3]
print(a==b)#true
print(a is b)##false可变类型的id不同,地址不同
print(id(a))#不同ID
print(id(b))#不同id

x=[1,2,3]
y=x.copy()
print(y)
print(id(y))#false可变类型的id不同,地址不同
print(id(x))#false可变类型的id不同,地址不同
print(x is y)


def hanshu(a,b):
    print(id(a))
    a=10
    print(id(a))
    c=a+b
    return c
x=5
print(id(x))
y=6
print(id(y))
z=hanshu(x,y)#16
print(z)
print(x)#5



a=[1,2,3,4]
y=[4,5,6]
def modify(b,c):
    print(id(b))
    c=[5,6,7]
    b.append(5)
    print(id(b))

print(id(a))#id
modify(a,y)#id,id
print(a)#[1,2,3,4,5]
print(y)#[4,5,6]

不建议将可变类型作为默认参数,因为会造成歧义

def hanshu(a=[]):
    a.append('h')
    print(a)
hanshu()
hanshu()

命名空间的访问,局部变量,全局变量

def hanshu(a,b):
    xy=5
    hah=9
    print(locals())
x=0
y=1
hanshu(x,y)
asfa=123445
print(globals())

局部变量只能在函数内使用,全局变量作用域在整个程序

a=[1,2,3]
def hanshu():
    x=3
    y=45
    print(a)
hanshu()#[1,2,3]
print(a)#[1,2,3]
y=12223
print(y)#12223
#print(x)#不能答应因为是局部变量

定义要放在函数调用之前,否则会报错

a=3
def hanshu():
    print(a)
    print(b)
    print(c)
b=4
hanshu()
c=5##要放在函数调用的前面,否则会报错

全局变量可以和局部变量重名,互不干扰

a=3
def hanshu():
    a=5
    print(a)
hanshu()#5
print(a)#3

错误eg1:

a=3
def hanshu():
    print(a)#报错,未定义,就输出值了
    a=5
    print(a)
hanshu()
print(a)



eg2.
       a=3
        def hanshu():
            a+=5##报错,未定义
            print(a)
        hanshu()
        print(a)

#全局变量是不可变类型,函数无法修改全局变量的值

a=3
def hanshu():
    a=5
    print(a)
hanshu()
print(a)

全局变量是可变类型,函数可以修改全局变量

> a=[1,2,3,4] def hanshu():
>     a.append(10)
 hanshu()
  print(a)##a为[1,2,3,4,10]

函数当中,带等号就是局部变量,不能再修改全局变量的值

a=[1,2,3,4]
def hanshu():
    a=[7,8,9]#带等号就是局部变量,不能再修改全局变量的值
hanshu()
print(a)

内部函数

def hanshu1():#2
    a=2##3
    def hanshu2(a,b):#6
        z=a+b#7
        return z#8
    b=3#4
    d=hanshu2(a,b)#5
    return d#9
print(hanshu1())#1

global函数,将局部变量,变为全局变量

b=3
def hanshu2():
    global b
    b+=4
    print(b)
print(b)#b=3
hanshu2()#b=7

nonlocal,修改外层函数,非全局函数

b=3
def hanshuw():
    a=1
    b=6
    def hanshu_nei():
        nonlocal a
        nonlocal b
        a=2
        b=5
    print(a)#a=1
    hanshu_nei()
    print(b)#b=5
hanshuw()
print(b)#3

作用域按照变量的定义位置可以划分四类即LEGB
Local(内部函数)局部作用域
Eclosing(嵌套函数的外层函数内部)嵌套作用域(闭包)
Global(模块全局),全局作用域
built-in(内建)内建作用域。指的是(builtins.py模块)

a=1
b=4
c=6
def hanshuw():
    a=2
    b=5
    def hanshu_n():
        a=3
        print(a)#3
        print(b)#5
        print(c)#6
        print(max,__name__)
    hanshu_n()
hanshuw()

匿名函数

d=lambda x,y:x*2+y
z=d(5,6)
print(z)

abs()函数,取绝对值
eg1:

  a=-1
    print(abs(a))

eg2:

  a=[1,2,3,4,-5]
    b=max(a,key=abs)#取绝对值最大的数,max内部去调用abs函数
    print(b)#输出5

def hanshu(a):
    return a*-1
a=[10,20,30,-50]
b=max(a,key=hanshu)##输出-50
print(b)

sort函数的用法

a=[1,2,-3,-5,4]
a.sort(key=abs)
print(a)#1,2,-3,4,-5

map函数是映射

def hanshu(a):
    return a*a
x=[1,2,3]
y=map(hanshu,x)
print(y)
for d in y:
    print(d)

filter函数,过滤掉不符合条件的

def aaa(a):
    if a%3==0:
        return True
x=[1,2,3,4,5,6,7,8,9]
d=filter(aaa,x)
print(d)
for i in d:
    print(i)
print(x)

zip函数,配对,长度不一致,取最短输出,返回类型是元祖

a=[1,2,3,4]
b=['a','b','c']
d=zip(a,b)
print(d)
for i in d:
    print(i)

将a,b输出为[{‘a’: ‘c’}, {‘b’: ‘d’}]

a=('a','b')
b=('c','d')
x=list(map((lambda a:{a[0]:a[1]}),zip(a,b)))
print(x)

eg1:

a = [1, 10, 2, 20, 3, 30, 4, 40]
f = []
for i in range(0, len(a), 2):
    f.append(a[i]+a[i+1])
print(f)
b = f[::2]
c = f[1::2]
d = map(lambda x: ({x[0]: x[1]}), zip(b, c))
print(list(d))

输出年龄最大的,以及按年龄排列

a=[{"name":"张三",'age':18},
{"name":"李四",'age':28},
{"name":"wangwu",'age':48},
{"name":"xiaoming",'age': 8},
   ]
def hanshu(a):
    return a['age']
m=max(a,key=hanshu)
print(m)
a.sort(key=hanshu)
print(a)

m=max(a,key=lambda a:a['age'])
print(m)

作业
不可变数据类型和可变数据类型自加的区别

 def demo(num, num_list):
        num += num
        num_list += num_list
        print(num)
        print(num_list)
        print("函数完成")
    gl_num = 9
    gl_list = [1, 2, 3]
    demo(gl_num, gl_list)
    print(gl_num)
    print(gl_list)

2.# 传值和传址问题
请说出 list1,list2,list3 的值是什么,并且说明为什么

def extendlist(val, lis=[]):
    lis.append(val)
    return lis


list1 = extendlist(10)#[10]


list2 = extendlist(123, [])#[123]

list3 = extendlist('a')#[a]

print(list1)  # [10,'a']

print(list2)  # [123]

print(list3)  # [10,'a']

3.# 匿名函数
请说出acts0的值,并且说明为什么

def makeActions():
    acts = []
    for i in range(5):
        acts.append(lambda x: i ** x)
    return acts


acts = makeActions()
print(acts[0](2))
print(acts[1](2))
print(acts[2](2))
print(acts[3](2))
print(acts[4](2))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值