python 随笔
os.path.expanduser()
# 把path中包含的"~"和"~user"转换成用户目录
os.path.expanduser(path)
Ref: Python os.path() 模块
@classmethod修饰符与 @staticmethod修饰符
@classmethod
class A(object):
# 属性默认为类属性(可以给直接被类本身调用)
num = "类属性"
# 实例化方法(必须实例化类之后才能被调用)
def func1(self): # self : 表示实例化类后的地址id
print("func1")
print(self)
# 类方法(不需要实例化类就可以被类本身调用)
@classmethod
def func2(cls): # cls : 表示没用被实例化的类本身
print("func2")
print(cls)
print(cls.num)
cls().func1()
# 不传递传递默认self参数的方法(该方法也是可以直接被类调用的,但是这样做不标准)
def func3():
print("func3")
print(A.num) # 属性是可以直接用类本身调用的
# A.func1() 这样调用是会报错:因为func1()调用时需要默认传递实例化类后的地址id参数,如果不实例化类是无法调用的
A.func2()
A.func3()
与Java
对比, python
中被classmethod
修饰符修饰的类方法类似于Java
类中的静态方法,不需要实例化类,可以直接通过 类名.方法名
的方式调用。
Ref: Python classmethod 修饰符
@staticmethod
@staticmethod
静态方法只是名义上归属类管理,但是不能使用类变量和实例变量,是类的工具包
放在函数前(该函数不传入self或者cls),所以不能访问类属性和实例属性
class cal:
cal_name = '计算器'
def __init__(self,x,y):
self.x = x
self.y = y
@property #在cal_add函数前加上@property,使得该函数可直接调用,封装起来
def cal_add(self):
return self.x + self.y
#在cal_info函数前加上@classmethon,则该函数变为类方法,
@classmethod #该函数只能访问到类的数据属性,不能获取实例的数据属性
def cal_info(cls): #python自动传入位置参数cls就是类本身
print('这是一个%s'%cls.cal_name) #cls.cal_name调用类自己的数据属性
@staticmethod #静态方法 类或实例均可调用
def cal_test(a,b,c): #改静态方法函数里不传入self 或 cls
print(a,b,c)
c1 = cal(10,11)
cal.cal_test(1,2,3) #>>> 1 2 3
c1.cal_test(1,2,3) #>>> 1 2 3
pip 使用requirement.txt
为了便于新环境部署,python项目中需要包含一个 requirements.txt 文件,用于记录所有依赖包及其精确的版本号
requirements.txt可以通过pip命令自动生成和安装
生成requirements.txt文件
pip freeze > requirements.txt
安装requirements.txt依赖
pip install -r requirements.txt
查看pip 安装包列表
pip list
常用的__doc__、name、__file__的使用
__doc__:获取到注释内容
__name__:获取到函数的名称
__file__:获取到当前的文件路径
* 和 ** 运算符
- 算数运算
- 代表乘法
** 代表乘方
>>> 2 * 5
10
>>> 2 ** 5
32
- 函数可变长度形参(用于函数的形参个数不确定)
可以将不定数量的参数传递给一个函数。其实并不是必须写成 *args 和 **kwargs。 *(星号) 才是必须的. 你也可以写成 *ar 和 k 。而写成 *args 和kwargs 只是一个通俗的命名约定。
*args 与 **kwargs 的区别,两者都是 python 中的可变参数:
*args 表示任何多个无名参数,它本质是一个 tuple
**kwargs 表示关键字参数(key word args),它本质上是一个 dict
如果同时使用 args 和 **kwargs 时,args 参数列要在 **kwargs 之前
>>> def fun(*args, **kwargs):
... print('args=', args)
... print('kwargs=', kwargs)
...
>>> fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')
args= (1, 2, 3, 4)
kwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}
使用 *args
>>> def fun(name, *args):
... print('你好:', name)
... for i in args:
... print("你的宠物有:", i)
...
>>> fun("Geek", "dog", "cat")
你好: Geek
你的宠物有: dog
你的宠物有: cat
使用**kwargs
>>> def fun(**kwargs):
... for key, value in kwargs.items():
... print("{0} 喜欢 {1}".format(key, value))
...
>>> fun(Geek="cat", cat="box")
Geek 喜欢 cat
cat 喜欢 box
TALK IS CHEAP, SHOW ME THE CODE