1.下面代码会输出什么?
def f(x, l=[]):
for i in range(x):
l.append(i*i)
print(l)
f(2)
f(3,[3,2,1])
f(3)
f(2) 列表l指向[0,1]
f(3,[3,2,1]) 新的列表变量指向[3,2,1]
f(3) 列表l仍然指向原l=[0,1]
输出结果:
[0, 1]
[3,2,1,0,1,4]
[0,1,0,1,4]
2.补全函数内容
def print_all(*args):
"""
请完成当前函数,要求输出格式如下,最好在一行内完成
1.apple
2.banana
3.cabbage
"""
pass
print_all('apple','banana', 'cabbage')
解答:可以使用enumarate(iterable, start_index)函数
def print_all(*args):
"""
请完成当前函数,要求输出格式如下,最好在一行内完成
1.apple
2.banana
3.cabbage
"""
[print(f'{x}.{y}') for x, y in enumerate(args, 1)]
print_all('apple','banana', 'cabbage')
3.实现一个装饰器,计算下列函数运行时间
def cal(i):
print('{}*{}={}'.format(i, i, i * i))
cal(2)
解答:
import time
from functools import wraps
def cost(f):
@wraps(f)
def inner(*args, **kwargs):
start = time.time()
f(*args, **kwargs)
print(time.time() - start)
return inner
@cost
def foo(i):
print('{}*{}={}'.format(i, i, i * i))
foo(2)
4.有一张如下的mysql数据表,查询每个班最高分的学生。
数据表: scores
+----+--------+-------+-------+
| id | name | score | class |
+----+--------+-------+-------+
| 1 | 张三 | 80 | 1班 |
| 2 | 李四 | 86 | 2班 |
| 3 | 王五 | 88 | 1班 |
| 4 | 赵六 | 70 | 2班 |
| 5 | 周七 | 60 | 3班 |
| 6 | 钱八 | 90 | 3班 |
+----+--------+-------+-------+
得到结果示例:
+----+--------+-------+-------+
| id | name | score | class |
+----+--------+-------+-------+
| 3 | 王五 | 88 | 1班 |
| 2 | 李四 | 86 | 2班 |
| 6 | 钱八 | 90 | 3班 |
+----+--------+-------+-------+
查询语句:
select s1.id,s1.name,s1.score,s1.class from
scores as s1
INNER JOIN
(select max(score) as score,class as class from scores GROUP BY class) as s2
on s1.score=s2.score and s1.class=s2.class
ORDER BY class;