初学python的一些疑问

一,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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值