Python学习笔记(三)

1.Python基础知识

1.1 isinstance()与issubclass()
isinstance(object ,classinfo),用于判断object是否为classinfo的一个实例,或者是否为classinfo类的子类的一个实例。
issubclass(class ,classinfo),用于判断参数class是否为classinfo的子类。
1.2 收集参数
Python函数参数分为位置参数关键字参数默认参数收集参数

def test( *params):
    print("有%d个参数"%len(params))
    print("第二个参数是:",params[1])
    print(params)
test('F','i','s','h','C')
有5个参数
第二个参数是: i
('F', 'i', 's', 'h', 'C')

Python就是把标志为收集参数的参数们打包成一个元组,参数标志为一个星号,两个星号的收集参数表示将参数打包为字典的形式。如果在收集参数后边还需要指定其他参数,在调用函数的时候就应该使用关键数参数来指定,如果参数中带有收集参数,可将其他参数设置为默认参数关键字参数默认参数可位于收集参数后,位置参数只能位于收集参数前。
星号可以解包,如传入参数a为一个列表或字典,可以在a前面加以上星号表示实参需“解包”后才能使用,未解包直接输入会报错。

def test( *params):
    print(params)
a=['F','i','s','h','C']
test(*a)
('F', 'i', 's', 'h', 'C')

1.3装饰器
在函数代码运行期间动态增加功能的方式称为“装饰器”(Decorator)。本质上,decorator就是一个返回函数的高阶函数,我们定义一个能打印日志的decorator如下:

def log(func):
    def wrapper(*args,**kw):
        print('call %s():'%func.__name__)
        return func(*args,**kw)
    return wrapper

观察上面的log函数,因为他是一个decorator,所以接收一个函数作为参数,并放回一个函数,我们借助@语法,把decorator置于函数定义处。

@log
def now():
    print('2020-11-1')

调用now()函数,不仅运行now()函数本身,还会在运行now()函数前打印一行日志:

>>>now()
call now():
2020-11-1

由于log()是一个decorator,返回一个函数,所以,原来的now()函数仍然存在,只是现在同名的now变量指向了新的函数,于是调用now()执行新函数,即在log()函数中返回的wrapper()函数。
1.4 关于函数的描述
1.函数可以赋值给一个变量
2.函数可以作为元素添加到集合对象中去
3.函数可以作为参数值传递给其他函数
4.函数可以当作函数的返回值
1.5 关于Python中socket的描述
1.使用recfrom()接收TCP数据
2.使用connect()初始化TCP服务器连接
3.服务器端使用listen()开始TCP监听

2.要点整理

2.1字符串格式化语法
print('GNU\'s Not %s %%' % 'UNIX') 输出:GNU's Not UNIX % 替换字符串:%s
替换整型:%d
替换浮点型:%f
显示%:%%
2.2 id() 函数和小整数池
id(object)是Python的一个用于返回object内存地址的函数。
已知a=[1,2,3]和b=[1,2,4],那么id(a[1])==id(b[1])的执行结果为()输出:True 为提高内存利用率,Python对一些简单的对象(如数值较小的整型,字符串等)采用重用对象内存的方法,Python对于小整数对象有小整数对象池,范围在[-5,257)之间,这个范围内整数内存地址一样,调用时均从小整数池中取。
2.3__name__
当运行模块时时__name__等于"main",当import到其他模块中,则__name__等于模块名称(不包含后缀.py)。