1.举例说明创建字典的方式(至少三种)
1)传统的文字表达式
dict={'a':1,'b':2,'c':3}
print(dict)
2)..字典键值表
d=dict(a=1,b=2,c=3)
print(d)
3)动态分配键值
dict={}
dict['a']=1
dict['b']=2
dict['c']=3
print(dict)
4)所有键的值都相同或者赋予初始值
dict={}
print(dict.fromkeys(['a','b','c'],1))
5)字典生成式
li=[('a',1),('b',2),('c',3)]
print({key:value for key ,value in li})
2.*args 和**kwargs的作用是什么?怎么用?
当你不确定传入函数中的东西时,可以使用他们(*可以用来解包)
例:只有一个形参,而传两个值会报错
def mysum(n):
print(n)
mysum(1,2)
*args:
def mysum(*args):
print(args)
mysum(1,2)
还有我们在求n个数的时候,我们事先不知道求几个数的和,就可以用*args
def mysum(n,b):
print(n,b)
sum = 0
for item in args:
sum += item
print(sum)
mysum(1, 2, 3.4)
**kwargs
允许你使用没有事先定义的参数名,对应的字典,也就是键值对
def getstuinfo(name, age, **kwargs):
print(name, age,kwargs)
getstuinfo('westos', 19, hobbies=['basketball', 'running'])
3.如何实现列表去重(至少两种方法)
1)先转化为集和,再转为列表
li=[1,2,3,4,3,2,1]
d=list(set(li))
print(d)
2)循环
new_s = [1,2,3,4,3,2,1]
s=[]
for x in new_s:
if x not in s:
s.append(x)
print(s)
ef s(*args):
new_s=[]
for x in args:
if x not in new_s:
new_s.append(x)
return new_s
print(s(1,2,3,4,3,2,1))
3)fromkeys
li=(1,2,3,4,3,2,1) dict={} a=list(dict.fromkeys(li)) print(a)
4.描述yield的作用
yield: 当函数中包含yield关键字, 返回值是一个生成器, 如果要执行函数内容.需要调用next方法, 或者for循环.
运行过程: 当执行next方法时, 遇到yield程序停止, 直到执行下一次next方法时, 从上一次停止的yield处继续执行,遇到yield停止运行.
生成器函数在生成值后会自动挂起并暂停他们的执行和状态,他的本地变量将保存状态信息,这些信息在函数恢复时将再度有效
5.python 如何实现拷贝一个对象
如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值——相当于通过“传引用”来传递对象。
如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象——相当于通过“传值”来传递对象
li1=li
li2=li[:]
li3=li.copy()
import copy
li4=copy.deepcopy(li))(前两个ip相同。后变几个均与li 的ip不同)
6.python中可变与不可变数据类型的总结
不可变数据类型:bool,整型int、浮点型float、字符串型string和元组tuple。
不可变可以理解为变量引用的地址处的值是不能被改变的
不可变数据类型 的优点就是内存中不管有多少个引用,相同的对象只占用了一块内存,但是它的缺点就是当需要对变量进行运算从而改变变量引用的对象的值时,由于是不可变的数据类型,所以必须创建新的对象,这样就会使得一次次的改变创建了一个个新的对象,不过不再使用的内存会被垃圾回收器回收。
可变数据类型:集和set,列表list和字典dict
对于可变数据类型来说,具有同样值的对象是不同的对象,即在内存中保存了多个同样值的对象,地址值不同
可变数据类型是允许同一对象的内容,即值可以变化,但是地址是不会变化的。但是需要注意一点,对可变数据类型的操作不能是直接进行新的赋值操作这样的操作就不是改变值了,而是新建了一个新的对象,这里的可变只是对于类似于append、+=等这种操作
所以可变数据类型的意思就是说对一个变量进行操作时,其值是可变的,值的变化并不会引起新建对象,即地址是不会变的,只是地址中的内容变化了或者地址得到了扩充
区分可不可变可以通过是否可以增加或删除元素来判断