1.Python中*args和**kwargs的区别
详细参见: 添加链接描述
当我们不知道向函数传递多少参数时,比如我们向传递一个列表或元组,我们就使用*args。
在我们不知道该传递多少关键字参数时,使用kwargs来收集关键字参数。
一、*args的使用方法
*args 用来将参数打包成tuple**给函数体调用
二、**kwargs的使用方法
**kwargs 打包关键字参数成dict给函数体调用
注意点:参数arg、args、kwargs三个参数的位置必须是一定的*。必须是(arg,*args,kwargs)这个顺序,否则程序会报错
python 中 *args 和 **kwargs 的区别
三、在 python 中,*args 和 kwargs 都代表 1个 或 多个 参数的意思。*args 传入tuple 类型的无名参数,而 **kwargs 传入的参数是 dict 类型。
在不知道传入多少个参数时,args是一个数组,kwargs一个字典。
2.深拷贝浅拷贝
重点参考
其次参考
1.深浅拷贝在python中经常使用,其区别的外在表现是:
使用浅拷贝,当原容器对象中可变对象中有元素发生变化,拷贝得到的对象也会变化。而使用深拷贝时,不会有这种问题。
2.浅拷贝
copy模块里面的copy方法实现
1)对于 不可变类型 Number String Tuple,浅复制仅仅是地址指向,不会开辟新空间。
2)对于 可 变类型 List、Dictionary、Set,浅复制会开辟新的空间地址(仅仅是最顶层开辟了新的空间,里层的元素地址还是一样的),进行浅拷贝
3)浅拷贝后,改变原始对象中为可变类型的元素的值,会同时影响拷贝对象的;改变原始对象中为不可变类型的元素的值,只有原始类型受影响。(操作拷贝对象对原始对象的也是同理)
深拷贝
3.copy模块里面的deepcopy方法实现
1)浅拷贝,除了顶层拷贝,还对子元素也进行了拷贝(本质上递归浅拷贝)
2)经过深拷贝后,原始对象和拷贝对象所有的元素地址都没有相同的了
转载链接:添加链接描述
4.什么是可变对象,什么是不可变对象:
可变对象是指,一个对象在不改变其所指向的地址的前提下,可以修改其所指向的地址中的值;
不可变对象是指,一个对象所指向的地址上值是不能修改的,如果你修改了这个对象的值,那么它指向的地址就改变了,相当于你把这个对象指向的值复制出来一份,然后做了修改后存到另一个地址上了,但是可变对象就不会做这样的动作,而是直接在对象所指的地址上把值给改变了,而这个对象依然指向这个地址。
3.python装饰器-写个时间计时器
装饰器参考链接
python time模块和datetime模块详解
import time
def count_time(func):
def int_time(*args, **kwargs):
start_time = time.time() # 程序开始时间
func()
over_time = time.time() # 程序结束时间
total_time = over_time - start_time
print('程序共计%s秒' % total_time)
return int_time
@count_time
def main():
print('>>>>开始计算函数运行时间')
x = 0
for i in range(1000000):
x=x//13
print(x)
if __name__ == '__main__':
main()
import datetime
def count_time(func):
def int_time(*args, **kwargs):
start_time = datetime.datetime.now() # 程序开始时间
func()
over_time = datetime.datetime.now() # 程序结束时间
total_time = (over_time-start_time).total_seconds()
print('程序共计%s秒' % total_time)
return int_time
@count_time
def main():
print('>>>>开始计算函数运行时间')
for i in range(1, 1000): # 可以是任意函数 , 这里故意模拟函数的运行时间
for j in range(i):
print(j)
if __name__ == '__main__':
main()
4.python数据类型有哪些?
1. 数字类型
Python数字类型主要包括int(整型)、long(长整型)和float(浮点型)、complex(复数),但是在Python3中就不再有long类型了。
int(整型)
在32位机器上,整数的位数是32位,取值范围是-231231-1,即-2147483648214748364;在64位系统上,整数的位数为64位,取值范围为-263263-1,即92233720368547758089223372036854775807。
long(长整型)
Python长整型没有指定位宽,但是由于机器内存有限,使用长的长整数数值也不可能无限大。
float(浮点型)
浮点型也就是带有小数点的数,其精度和机器有关。
complex(复数)
Python还支持复数,复数由实数部分和虚数部分构成,可以用 a + bj,或者 complex(a,b) 表示, 复数的实部 a 和虚部 b 都是浮点型。
2. 字符串
在Python中,加了引号的字符都被认为是字符串,其声明有三种方式,分别是:单引号、双引号和三引号;Python中的字符串有两种数据类型,分别是str类型和unicode类型,str类型采用的ASCII编码,无法表示中文,unicode类型采用unicode编码,能够表示任意字符,包括中文和其他语言。
3. 布尔型
和其他编程语言一样,Python布尔类型也是用于逻辑运算,有两个值:True(真)和False(假)。
4. 列表
列表是Python中使用最频繁的数据类型,集合中可以放任何数据类型,可对集合进行创建、查找、切片、增加、修改、删除、循环和排序操作。
5. 元组
元组和列表一样,也是一种序列,与列表不同的是,元组是不可修改的,元组用**”()”标识**,内部元素用逗号隔开。
6. 字典
字典是一种键值对的集合,是除列表以外Python之中最灵活的内置数据结构类型,列表是有序的对象集合,字典是无序的对象集合。
7. 集合
集合是一个无序的、不重复的数据组合,它的主要作用有两个,分别是去重和关系测试。
原文链接:添加链接描述