41、def func(a,b=[]) 这种写法有什什么坑?
def func(a,b = []):
b.append(1)
print(a,b)
func(a=2)
func(2)
func(2)
‘’’
2 [1]
2 [1, 1]
2 [1, 1, 1]
函数的默认参数是一个list 当第一次执行的时候实例化了一个list
第二次执行还是用第一次执行的时候实例化的地址存储
所以三次执行的结果就是 [1, 1, 1] 想每次执行只输出[1] ,默认参数应该设置为None
‘’’
42、如何实现 “1,2,3” 变成 [‘1’,’2’,’3’]
list(“1,2,3”.split(’,’))
- 如何实现[‘1’,’2’,’3’]变成[1,2,3]
[int(x) for x in [‘1’,‘2’,‘3’]]
python 里如何把[‘1’,‘2’,‘3’] 变成[1,2,3]
a = [‘1’,‘2’,‘3’]
b = [int(i) for i in a]
print(b)
[1, 2, 3]
- a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的区别?
补充:
a=[1,2,3,4,5],b=a和b=a[:],有区别么?
a = [1,2,3,4,5]
b = a
b1 = a[:]
print(b) # [1, 2, 3, 4, 5]
print(b) # [1, 2, 3, 4, 5]
b.append(6)
print(“a”,a) # a [1, 2, 3, 4, 5, 6]
print(“b”,b) # b [1, 2, 3, 4, 5, 6] 传递引用
print(“b1”,b1) # b1 [1, 2, 3, 4, 5] 拷贝
一个列表A=[2,3,4],Python如何将其转换成B=[(2,3),(3,4),(4,2)]?
B = zip(A, A[1:]+A[:1])
-
如何用一行代码生成[1,4,9,16,25,36,49,64,81,100]
[i*i for i in range(1,11)] -
一行代码实现删除列表中重复的值
list(set([1, 2, 3, 4, 45, 1, 2, 343, 2, 2])) -
如何在函数中设置一个全局变量
python中的global语句是被用来声明全局变量的。
x = 2
def func():
global x
x = 1
return x
func()
print(x) # 1
- logging模块的作用?以及应用场景?
logging
模块定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统
作用:可以了解程序运行情况,是否正常
在程序的出现故障快速定位出错地方及故障分析
- 请用代码简答实现stack
Stack() 创建一个新的空栈
push(item) 添加一个新的元素item到栈顶
pop() 弹出栈顶元素
peek() 返回栈顶元素
is_empty() 判断栈是否为空
size() 返回栈的元素个数
实现一个栈stack,后进先出
‘’’
class Stack:
def init(self):
self.items = []
def is_empty(self):
# 判断是否为空
return self.items == []
def push(self,item):
# 加入元素
self.items.append(item)
def pop(self):
# 弹出元素
return self.items.pop()
def peek(self):
# 返回栈顶元素
return self.items[len(self.items)-1]
def size(self):
# 返回栈的大小
return len(self.items)
if name == “main”:
stack = Stack()
stack.push(“H”)
stack.push(“E”)
stack.push(“L”)
print(stack.size()) # 3
print(stack.peek()) # L
print(stack.pop()) # L
print(stack.pop()) # E
print(stack.pop()) # H
‘’’
- 常用字符串格式化哪几种?
1.占位符%
%d 表示那个位置是整数;%f 表示浮点数;%s 表示字符串。
print(‘Hello,%s’ % ‘Python’)
print(‘Hello,%d%s%.2f’ % (666, ‘Python’, 9.99)) # 打印:Hello,666Python10.00
2.format
print(’{k} is {v}’.format(k=‘python’, v=‘easy’)) # 通过关键字
print(’{0} is {1}’.format(‘python’, ‘easy’)) # 通过关键字
- 简述 生成器、迭代器、可迭代对象 以及应用场景?
迭代器
含有__iter__和__next__方法 (包含__next__方法的可迭代对象就是迭代器)
生成器
:包括含有yield这个关键字,生成器也是迭代器,调动next把函数变成迭代器。
应用场景:
range/xrange
- py2: range(1000000) ,会立即创建,xrange(1000000)生成器
- py3:range(10000000)生成器
- redis获取值
conn = Redis(…)
def hscan_iter(self, name, match=None, count=None):
“”"
Make an iterator using the HSCAN command so that the client doesn’t
need to remember the cursor position.
match
allows for filtering the keys by pattern
count
allows for hint the minimum number of returns
“”"
cursor = ‘0’
while cursor != 0:
# 去redis中获取数据:12
# cursor,下一次取的位置
# data:本地获取的12条数数据
cursor, data = self.hscan(name, cursor=cursor,match=match, count=count)
for item in data.items():
yield item
stark组件
def index(request):
data = [
{‘k1’:1,‘name’:‘alex’},
{‘k1’:2,‘name’:‘老男孩’},
{‘k1’:3,‘name’:‘小男孩’},
]
new_data = []
for item in data:
item[‘email’] = "xxx@qq.com"
new_data.append(item)
return render(request,‘xx.html’,{‘data’:new_data})
可迭代对象
一个类内部实现__iter__方法且返回一个迭代器。
应用场景:
- wtforms中对form对象进行循环时候,显示form中包含的所有字段。
class LoginForm(Form):
name = simple.StringField(
label=‘用户名’,
validators=[
validators.DataRequired(message=‘用户名不能为空.’),
validators.Length(min=6, max=18, message=‘用户名长度必须大于%(min)d且小于%(max)d’)
],
widget=widgets.TextInput(),
render_kw={‘class’: ‘form-control’}
)
pwd = simple.PasswordField(
label=‘密码’,<