[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]
2.简述read、readline、readlines的区别? read:读取整个文件 readline:读取下一行 readlines:读取整个文件到一个迭代器以供我们遍历 3.python函数重载机制 函数重载主要是为了解决两个问题。- 可变参数类型。
- 可变参数个数。
def find_second_large_num(num_list):
one = num_list[0]
two = num_list[0]
for i in range(1, len(num_list)):
if num_list[i] > one:
two = one
one = num_list[i]
elif num_list[i] > two:
two = num_list[i]
print("第二个大的数是 :", two)
num_list = [34, 11, 23, 56, 78, 0, 9, 12, 3, 7, 5]
find_second_large_num(num_list)
5.手写一个判断时间的装饰器
import datetime
class TimeException(Exception):
def __init__(self, exception_info):
super().__init__()
self.info = exception_info
def __str__(self):
return self.info
def timecheck(func):
def wrapper(*args, **kwargs):
if datetime.datetime.now().year == 2021:
func(*args, **kwargs)
else:
raise TimeException("函数已过时")
return wrapper
@timecheck
def test(name):
print("Hello {}, 2021 Happy".format(name))
if __name__ == "__main__":
test("backbp")
6.使用Python内置的fifilter()方法来过滤
list(filter(lambda x: x % 2 == 0, range(10)))7.编写函数的4个原则
- 函数设计要尽量短小
- 函数声明要做到合理、简单、易于使用
- 函数参数设计应该考虑向下兼容
- 一个函数只做一件事情,尽量保证函数语句粒度的一致性
globals() # 返回包含当前作用域全局变量的字典。 global 变量 设置使用全局变量10.对缺省参数的理解 缺省参数指在调用函数的时候没有传入参数的情况下,调用默认的参数,在调用函数的同时赋值时,所传入的参数会替代默认参数。 *args是不定长参数,它可以表示输入参数是不确定的,可以是任意多个。 **kwargs是关键字参数,赋值的时候是以键值对的方式,参数可以是任意多对在定义函数的时候 不确定会有多少参数会传入时,就可以使用两个参数 。 11.带参数的装饰器
带定长参数的装饰器
def new_func(func):
def wrappedfun(username, passwd):
if username == 'root' and passwd == '123456789':
print('通过认证')
print('开始执行附加功能')
return func()
else:
print('用户名或密码错误')
return
return wrappedfun
@new_func
def origin():
print('开始执行函数')
origin('root','123456789')
带不定长参数的装饰器
def new_func(func):
def wrappedfun(*parts):
if parts:
counts = len(parts)
print('本系统包含 ', end='')
for part in parts:
print(part, ' ',end='')
print('等', counts, '部分')
return func()
else:
print('用户名或密码错误')
return func()
return wrappedfun
@new_func
def origin():
print('开始执行函数')
origin('root','123456789')
12.为什么函数名字可以当做参数用?
Python中一切皆对象,函数名是函数在内存中的空间,也是一个对象。
13.Python中pass语句的作用是什么? 在编写代码时只写框架思路,具体实现还未编写就可以用pass 进行占位,是程序不报错,不会进行任何操作。 14.map函数和reduce函数map(lambda x: x * x, [1, 2, 3, 4]) # 使用 lambda # [1, 4, 9, 16] reduce(lambda x, y: x * y, [1, 2, 3, 4]) # 相当于 ((1 * 2) * 3) * 4 # 2415.回调函数是如何通信的? 回调函数是把函数的指针( 地址 ) 作为参数传递给另一个函数,将整个函数当作一个对象,赋值给调用的函数。 16.Python主要的内置数据类型都有哪些? 布尔类型,数字,字符串,列表,元组,字典,集合 17.print dir( ‘a ’) 的输出? 输出字符串'a' 的内建方法
print(dir('a'))
# 输出字符串 a 的内建方法
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
18.hasattr() getattr() setattr() 函数使用详解
hasattr(object,name)函数
:
判断一个对象里面是否有name
属性或者
name
方法,返回
bool
值,有
name
属性(方法)返回
True
,否
则返回
False
。
class function_demo(object):
name = 'demo'
def run(self):
return "hello function"
functiondemo = function_demo()
res = hasattr(functiondemo, "name") # 判断对象是否有name属性,True
res = hasattr(functiondemo, "run") # 判断对象是否有run方法,True
res = hasattr(functiondemo, "age") # 判断对象是否有age属性,False
getattr(object, name[,default])函数:
获取对象object
的属性或者方法,如果存在则打印出来,如果不存在,打印默认值,默认值可选。注意:如果返回的是对象的方法,则打印结果是:方法的内存地址,如果需要运行这个方法,可以在后面
添加括号
()。
functiondemo = function_demo() getattr(functiondemo, "name")# 获取name属性,存在就打印出来 --- demo getattr(functiondemo, "run") # 获取run 方法,存在打印出方法的内存地址 getattr(functiondemo, "age") # 获取不存在的属性,报错 getattr(functiondemo, "age", 18)# 获取不存在的属性,返回一个默认值setattr(object, name, values)函数: 给对象的属性赋值,若属性不存在,先创建再赋值 。
class function_demo(object):
name = "demo"
def run(self):
return "hello function"
functiondemo = function_demo()
res = hasattr(functiondemo, "age") # 判断age属性是否存在,False
print(res)
setattr(functiondemo, "age", 18) # 对age属性进行赋值,无返回值
res1 = hasattr(functiondemo, "age") # 再次判断属性是否存在,True
print(res1)
综合使用
class function_demo(object):
name = "demo"
def run(self):
return "hello function"
functiondemo = function_demo()
res = hasattr(functiondemo, "addr") # 先判断是否存在
if res:
addr = getattr(functiondemo, "addr")
print(addr)
else:
addr = getattr(functiondemo, "addr", setattr(functiondemo, "addr", "北京首都"))
print(addr)
19.一行代码解决阶乘函数
from functools import reduce n = 10 reduce(lambda x,y : x*y,range(1,n+1))20.什么是lambda函数? 有什么好处? lambda 函数, 匿名函数 ,是一个可以接收任意多个参数 ( 包括可选参数 )并且返回单个表达式值的函数, 省略了用 def 声明函 数的标准步骤 。
- lambda函数比较轻便,即用即扔,很适合需要完成一项功能,但是此功能只在此一处使用,连名字都很随意的情况下 ;
- 匿名函数,一般用来给fifilter,map这样的函数式编程服务 ;
- 作为回调函数,传递给某些应用,比如消息处理。
- 判断递归的次数是否达到某一限定值 ;
- 判断运算的结果是否达到某个范围等,根据设计的目的来选择。
Python中append和extend的区别https://www.cnblogs.com/subic/p/6553187.html append命令是将整个对象加在列表末尾;而extend命令是将新对象中的元素逐一加在列表的末尾。总的来说,append命令可以添加单个元素,也可以添加可迭代对象;而extend命令只能添加可迭代对象。



