python常见面试题 基础篇 (二)

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. 如何实现[‘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]

  1. 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. 如何用一行代码生成[1,4,9,16,25,36,49,64,81,100]
    [i*i for i in range(1,11)]

  2. 一行代码实现删除列表中重复的值
    list(set([1, 2, 3, 4, 45, 1, 2, 343, 2, 2]))

  3. 如何在函数中设置一个全局变量
    python中的global语句是被用来声明全局变量的。

x = 2
def func():
global x
x = 1
return x
func()
print(x) # 1

  1. logging模块的作用?以及应用场景?
    logging
    模块定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统

作用:可以了解程序运行情况,是否正常
    在程序的出现故障快速定位出错地方及故障分析

  1. 请用代码简答实现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. 常用字符串格式化哪几种?
    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’)) # 通过关键字

  1. 简述 生成器、迭代器、可迭代对象 以及应用场景?

迭代器
含有__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=‘密码’,<

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值