Skip to content

Latest commit

 

History

History
120 lines (89 loc) · 5.52 KB

File metadata and controls

120 lines (89 loc) · 5.52 KB

DayDayUp

记录复习过程中的点滴!!


Python


1. python内建数据类型

整型-int  布尔型-bool  字符串-str  列表-list  元组-tuple  字典-dict

2. assert(断言)

assert expression   # 用于判断一个表达式,在表达式条件为 false 的时候触发异常。

3. 列出python中可变数据类型和不可变数据类型,并简述原理

不可变数据类型:数值型、字符串型string和元组tuple。 
不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象。 而对于相同的值的对象,
在内存中则只有一个对象(一个地址)。

可变数据类型:列表list和字典dict。
允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值, 而不会
新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在
不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用
计数,是实实在在的对象。

4. lambda函数实现两个数相乘

sum = lambda a, b: a*b
print(sum(2, 2))

5. 简述多线程、多进程

进程:
    1、操作系统进行资源分配和调度的基本单位,多个进程之间相互独立
    2、稳定性好,如果一个进程崩溃,不影响其他进程,但是进程消耗资源大,开启的进程数量有限制
线程:
    1、CPU进行资源分配和调度的基本单位,线程是进程的一部分,是比进程更小的能独立运行的基本单位,
      一个进程下的多个线程可以共享该进程的所有资源
    2、如果IO操作密集,则可以多线程运行效率高,缺点是如果一个线程崩溃,都会造成进程的崩溃
    3、Python有一个名为Global Interpreter Lock(GIL)的结构。GIL确保每次只能执行一个“线程”。
      一个线程获取GIL执行相关操作,然后将GIL传递到下一个线程。
应用:
    IO密集的用多线程,在用户输入,sleep 时候,可以切换到其他线程执行,减少等待的时间
    CPU密集的用多进程,因为假如IO操作少,用多线程的话,因为线程共享一个全局解释器锁,
    当前运行的线程会霸占GIL,其他线程没有GIL,就不能充分利用多核CPU的优势

6. 简述any()和all()方法

any():只要迭代器中有一个元素为真就为真
all():迭代器中所有的判断项返回都是真,结果才为真

python中什么元素为假?

答案:(0,空字符串,空列表、空字典、空元组、None, False)

7. 异常类型

IOError:输入输出异常
AttributeError:试图访问一个对象没有的属性
ImportError:无法引入模块或包,基本是路径问题
IndentationError:语法错误,代码没有正确的对齐
IndexError:下标索引超出序列边界
KeyError:试图访问你字典里不存在的键
SyntaxError:代码逻辑语法出错,不能执行
NameError:使用一个还未赋予对象的变量

8. python中copy和deepcopy区别

1、复制不可变数据类型,不管copy还是deepcopy,都是同一个地址当浅复制的值是不可变对象
  (数值,字符串,元组)时和=“赋值”的情况一样,对象的id值与浅复制原来的值相同。
2、复制的值是可变对象(列表和字典)
    浅拷贝copy有两种情况:
        第一种情况:复制的对象中无复杂子对象,原来值的改变并不会影响浅复制的值,
        同时浅复制的值改变也并不会影响原来的值。原来值的id值与浅复制原来的值不同。
        第二种情况:复制的对象中有复杂子对象 (例如列表中的一个子元素是一个列表),
        改变原来的值中的复杂子对象的值,会影响浅复制的值。
    深拷贝deepcopy:完全复制独立,包括内层列表和字典

9. python字典和json字符串相互转化方法

json.dumps():字典转json字符串
json.loads():json字符串转字典

10. 字符串转化大小写

str.upper()
str.lower()

11. python传参数是传值还是传址?

Python中函数参数是引用传递(注意不是值传递)。
对于不可变类型(数值型、字符串、元组),因变量不能修改,所以运算不会影响到变量自身;
对于可变类型(列表字典)来说,函数体运算可能会更改传入的参数变量。

12. eval() 函数

1. eval() 函数用来执行一个字符串表达式,并返回表达式的值。
    x = 7
    eval( '3 * x' )
    output: 21
2. eval 方法能使字符串本身的引号去掉,保留字符的原本属性。
    a = "123" # <class 'str'>
    b = eval(a) # <class 'int'>
    b: 123

13. 如何在Python中将列表项随机化?

from random import shuffle
shuffle(list)

14. python 中的 is 和==

is是身份运算符,判断两个对象的内存id是否相等
==是比较运算符,判断两个对象的值是否相等
进行值比较的时候使用==,判断是否是同一对象的时候使用is