文章目录
一,python中有方法重载吗?
python中不可以重载,后面定义的同名方法会覆盖之前的方法定义。
非要实现重载的话,那只能通过type来判断或者请求转发机制。
例如:
1,通过type来处理相应的逻辑。
def Aa(a=1, b=1):
if type(a) == int and type(b) == float:
print(1)
elif type(a) == float and type(b) == int:
print(2)
# Aa(int,float)
Aa(1, 1.0)
# Aa(float,int)
Aa(1.0, 1)
2,通过请求转发机制
from functools import singledispatch
@singledispatch
def function(obj):
print('%r'%(obj))
@function.register(int)
def function_int(obj):
print('Integer: %d'%(obj))
@function.register(str)
def function_int(obj):
print('String: %s'%(obj))
@function.register(list)
def function_list(obj):
print('List: %r'%(obj))
if __name__ == "__main__":
function(1)
function('hello')
function(range(3))
function(object)
二,Python构造方法可以重载吗?
不可以,但是可以通过给出默认参数的形式,这样给属性复制的时候参数就可以任意了
class Student(User):
grade=''
def __init__(self,name='',age=0,grade='',password='123456'):
User.__init__(self,name,age,password)
self.grade=grade
三,Python中的__str__和__repr__?
https://www.cnblogs.com/fengff/p/8650114.html
python中的__str__相当于java中的toString
str()用于显示给用户,而__repr__()用于显示给开发人员
print()就是面向程序员,哈哈哈,不是程序员用什么print
直接object就是用户。
可以直接在定义完__str__的时候就定义上__repr__
这句话是转载的:当我们想所有环境下都统一显示的话,可以重构__repr__方法;当我们想在不同环境下支持不同的显示,例如终端用户显示使用__str__,而程序员在开发期间则使用底层的__repr__来显示,实际上__str__只是覆盖了__repr__以得到更友好的用户显示。
def __str__(self):
return '{self.username}'
__repr__==__str__
四,python中的字符串前缀?
u,r,b,f
https://blog.csdn.net/tyttytzhz/article/details/85615648
五,python一切皆对象,和python的垃圾回收机制?
https://www.cnblogs.com/vamei/p/3232088.html
划重点:python缓存了整数和短字符串,因此每个对象只有一份。所以整型和单个字符串变量只要内容相同,内存地址总是相同的。
六,python多重继承时多个基类的优先顺序?
https://www.cnblogs.com/chengd/articles/7287528.html
新式类:当前类或者父类继承了object类
经典类:深度优先
新式类:广度优先
七,name==main?
这里有一篇非常详细非常棒的解释:http://blog.konghy.cn/2017/04/24/python-entry-program/
name 是内置变量,用于表示当前模块的名字,同时还能反映一个包的结构。
python是一种脚本语言,是逐行解释运行,不像C,C++,Java需要一个main方法作为程序的执行入口。
所以if name == ‘main’ 就相当于是 Python 模拟的程序入口
name 是当前模块名,当模块被直接运行时模块名为 main 。这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。
八,re.search和re.match的区别?
https://www.jianshu.com/p/4068a5fca79b
re.match函数只匹配字符串的开始字符,如果开始的字符不符合正则表达式,匹配就会失败,返回None。
re.search方法匹配整个字符串,直到找到一个匹配的对象,匹配结束没找到匹配值才返回None。
所以在抓取网页信息的时候应该采用search方法。
九,python中的yield,next,send?
https://blog.csdn.net/mieleizhi0522/article/details/82142856
def foo():
print("starting...")
while True:
res = yield 4
print("res:",res)
g = foo()//a,由于foo中有yield所以foo并未真正执行,只是得到了一个迭代器对象g
//b,对迭代器对象g进行迭代,也就是开始真正的执行foo函数,输出starting.........,进入while 遇到yield之后return 4,退出foo,print(4)
print(next(g))
print("*"*20)//c,输出20个*
//d,再次对g进行迭代,到上次res=yield 4的地方,上次的赋值操作并未完成就已经return了,所以这次接着执行res的赋值是None,foo中print("res":None) 再次进入while循环,再次遇到yield由于这次和上次一样同样return 4所以迭代终止,print(4)
print(next(g))
send()方法是指定上一次yield方法返回的值
https://blog.csdn.net/hedan2013/article/details/56293173