python查漏

文章目录

  • python小知识点
    • 可以使用in遍历file对象
    • 可以直接import py文件中的类、函数。
    • python中is与==,is not与!=之间的区别
    • 二维数组的申请
      • 申请
      • 避免浅拷贝(正确申请方法)
      • 列表解析
    • 数组的+与nd封装的+的区别
    • Python中字符串前“b”,“r”,“u”,“f”的作用
    • 父类中调用子类函数

python小知识点

可以使用in遍历file对象

​ 使用in遍历file对象时,与使用file.readline()是一个道理。

filename = "a.txt"
file = open(filename)
for line in file:
    print(line)
12312 1432 4354

12312213123

hhtyrhjtyuj

dsafdsafasdf

可以直接import py文件中的类、函数。

例如:包路径为:gensim.models.word2vec.Word2Vec

word2vec是py文件

Word2Vec是类

import gensim.models.Word2Vec

# 也可以使用全包名进行导入
import gensim.models.word2vec.Word2Vec

注意:至少路径是py文件的父路径。也就是py文件可省略。

python中is与==,is not与!=之间的区别

is与的关系与is not与!=的关系一样,所以只说is与

is与==的区别:

  • is用来判断两个id是否相同,相当于java中的==
  • ==用来判断两个是否相同,相当于java中的equal( )

a、假如比较的两个变量,指向的都是不可变的类型 ( int, str, tuple等 ) , 那么is, is not 和 ==, != 是完全等价的。

b、假如对比的两个变量,指向的是可变的类型(list,dict等),则两者是有区别的。因为不可变类型存在常量区中所以id相同,对于变量存在堆中id是不同的。

二维数组的申请

申请

python中申请二位数组不像java或c++可以直接申请大小,python中 [int] 就是访问没其他意思了。

#1*n,因为最外层里面有一个list,list可以存放n个
a = [[]]
#3*n,三行n列
a = [[],[],[]]

#等价于a = [[],[],[]]。这个操作是这个的内部乘有几个
a = [[]]*3

#等价于a = [ [[]], [[]], [[]] ],一个数组里面的每个元素是一个二维数组(1*n的)
a = [ [[]] ]*3

#当然这个内一层啥也没,所以等价于a = [[]]
a = [[]*3]

避免浅拷贝(正确申请方法)

但是这种方法会出现浅拷贝现象,也就是你往里面附一个值它的其他行也会跟着改变。

如:

a = [[1]*3]*2
a[1][1] = 8
print(a)

[[1, 8, 1], [1, 8, 1]]

所以应该运用列表解析进行创建。

如:

a = [[1]*3 for i in range(2)]
a[1][1] = 8
print(a)

[[1, 1, 1], [1, 8, 1]]

列表解析

() for i in range(x)
#或
() for i in iterator

'''
从列表或迭代器中获得i,进行for前的()运算并返回。从上边的例子是,从0~1每次返回一个[1]*3
下面是其他应用例子
'''

[i+1 for i in range(10)]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#i+1 for i in range(10) 返回的是一个发生器

数组的+与nd封装的+的区别

数组的+是将两个数组按照第一维度合并成一个数组。而nd的+是将两个数组按照各个维度相对应的数分别相加成一个数组。

也就是说数组的+是合并,nd的+是真的加,而且数组+数组不用考虑维度问题,因为直接用第一维度合并了,元素可以是任意类型。

Python中字符串前“b”,“r”,“u”,“f”的作用

1、字符串前加 u

例:u"我是含有中文字符组成的字符串。"

作用:

后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。

2、字符串前加 r

例:r"\n\n\n\n”  表示一个普通生字符串 \n\n\n\n,而不表示换行了。

作用:

去掉反斜杠的转移机制。

(特殊字符:即那些,反斜杠加上对应字母,表示对应的特殊含义的,比如最常见的”\n”表示换行,”\t”表示Tab等。 )
应用:

常用于正则表达式,对应着re模块。

3、字符串前加 b

例: response = b’Hello World!’ b’ ’ 表示这是一个 bytes 对象

作用:

b" "前缀表示:后面字符串是bytes 类型。

用处:

网络编程中,服务器和浏览器只认bytes 类型数据。

如:send 函数的参数和 recv 函数的返回值都是 bytes 类型

附:

在 Python3 中,bytes 和 str 的互相转换方式是

str.encode(‘utf-8')
bytes.decode(‘utf-8')

4、字符串前加 f

import time
t0 = time.time()
time.sleep(1)
name = 'processing'

以 f开头表示在字符串内支持大括号内的python 表达式

print(f'{name} done in {time.time() - t0:.2f} s')

输出:

processing done in 1.00 s

父类中调用子类函数

python中的父子类分界不是那么明确,因为在子类构造函数中调用父类构造函数时可以传递子类的self,这样父类中就知道子类函数的存在了。但是在Java中并不可以因为Java是一种强制类型的语言,this并不是一个数据实例所以实现不了父类调用子类中函数的情况。

例如:

class A:
    def __init__(self):
        a = 0;
    def port(self):
        self.out();

class B(A):
    def __init__(self):
        A.__init__(self)

    def out(self):
        print(111)

b = B()
b.port()
#在python中这并不出错

你可能感兴趣的:(python,python)