PyCharm相关知识

1.pycharm的列编辑模式实现

在当前文件点击鼠标右键——>选择Column Selection Mode——>用鼠标垂直选择文本,进行复制粘贴
在这里插入图片描述

2.小数精度损失问题

如何导致?
 - 因为 Python 中使用双精度浮点数来存储小数。在 Python 使用的 IEEE 754 标准中,8字节64位存储空间分配了52位来存储浮点数的有效数字,11位存储指数,1位存储正负号,即这是一种二进制版的科学计数法格式。二进制小数在表示有理数时极易遇到无限循环的问题。其中很多在十进制小数中是有限的。因为浮点数只有52位有效数字,从第53位开始,就舍入了。舍入(round)的规则为“0 舍 1 入”,所以有时候会稍大一点有时候会稍小一点。 
如何解决?
 - 进行精度的控制
 - 对于要求较小的精度,使用round()内置方法。round()如果只有一个数作为参数,不指定位数的时候,则只保留该数四舍五入后的整数部分。如图2。一般情况是使用四舍五入的规则,但是碰到舍入的后一位为5时,如果要取舍的位数前的数是奇数,则直接舍弃,如果偶数则向上取舍,如图3。 
 - 对于要求超过17位的精度分析,使用decimal模块,配合getcontext。默认的context的精度是28位,可以设置为50位甚至更高,都可以。这样在分析复杂的浮点数的时候,可以有更高的自己可以控制的精度。

效果如下:
在这里插入图片描述
效果如下:
在这里插入图片描述

3.等号赋值内存原理

值传递
- 变量所指的对象是不可变类型。等号赋值后,对于基础数据类型,如数值类型int和float,字符串str,元组tuple,布尔型boolean等,是值传递。传递的是数值。
- 不可变对象,该对象所指向内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。

效果如下:
在这里插入图片描述

址传递
- 变量所指的对象是可变类型。等号赋值后,对于复杂数据类型,如列表list,字典dict,集合set等,是址传递。传递的是引用。
- 可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变。

效果如下:
在这里插入图片描述

4.id(),解释器自动优化,解释器自动释放内存算法

id()
- 方法的返回值就是对象的内存地址。

效果如下:
在这里插入图片描述

解释器自动优化
- 1.Psyco:python语言的一个扩展模块,可以即时的对程序的代码进行专业的算法来进行优化,在一定程度上提高程序的执行速度,这个扩展模块目前已经停止维护,由PyPy替代,可以更好的对源代码进行优化处理。
- 2.PyPy:是python实现的解释器,执行动态的编译{不是解释},可以在不同的操作系统平台上使用。
- 3.Shed Skin:Python的编译器,可以将python代码转换成优化的C++代码执行。
解释器自动释放内存算法
- python中是自动管理内存的,实际上是通过“引用计数”的方式来管理内存。当一个对象被创建出来的时候,引用计数为1,当对象被其他对象引用时,引用计数+1,当对象的引用被删除时,引用计数会-1,当对象的引用计数为0时,该对象所在的内存会被系统在合适的时候回收。

5.列表生成式

  • python里面[]表示一个列表,快速生成一个列表可以用range()函数来生成。
  • 对列表数平方,效果如下:
    在这里插入图片描述

6.匿名函数,高阶函数,装饰器

匿名函数
- lambda函数的语法只包含一个语句,如下:lambda arg1,.....argn:expression,
- 关键字lambda表示匿名函数
- 冒号:之前的arg1,.....argn表示它们是这个函数的参数。
- 匿名函数不需要return来返回值,表达式本身结果就是返回值。

代码示例:返回结果为6
f = lambda a,b,c:a+b+c
print f(1,2,3)

高阶函数
一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。
参数为函数
def bar():
      print("in the bar..")
def foo(func):
      func()
      print("in the foo..")
foo(bar)
返回值为函数
def bar():
      print("in the bar..")
def foo(func):
      print("in the foo..")
      return bar
res=foo(bar)
res()
装饰器
修改其他函数的功能的函数。他们有助于让我们的代码更简短。

def decorator(a_func):                                
def wrapTheFunction():                            
    print("before a_func()")                      
    a_func()                                      
    print("after a_func()")                       
return wrapTheFunction                            
def requiring_decoration():                           
print("remove my foul smell")                     
requiring_decoration()                                
# outputs: "remove my foul smell"                      
requiring_decoration = decorator(requiring_decoration)
requiring_decoration()                                
# outputs:before a_func()                              
#         remove my foul smell                         
#         after a_func()                               

7.操作符优先级

在这里插入图片描述
在这里插入图片描述

8.线程安全,GIL全局锁

  • 线程安全
    • 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。
  • GIL全局锁
    • 保证同一时间只有一个线程得到数据并且只有一个线程执行,但是cpu调度时间到了以后,第一个线程无论是否完成均程等待状态(若未执行完毕,数据放入寄存器中)下一线程得到的依旧是原始的公共数据。

9.类继承,self理解,静态方法

  • 类继承
    • python允许在一个或多个类的基础上生成新的类,新的类可以使用父类的一些属性和方法,这个过程就叫做继承。
  • self理解
    • self代表类的实例,而非类。
  • 静态方法
    • 静态方法就是嵌入在类中没有self参数的函数,并且旨在操作类属性而不是实例属性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值