Python学习

1、解释性语言,会带来一个缺点,就是每一次更新都会比较慢,没有编译的过程,但事实应用起来,感觉不到他的慢。注:java是半编译半解释型语言。

2、可移植,拷贝.py的文件就可以了


3、python2和python3的区别:

(1)print函数:(Python3中print为一个函数,必须用括号括起来;Python2中print为class)

Python 2

print 'Hello, World!'

print('Hello, World!')

print "text", ; print 'print text on the same line'

run result:

Hello, World!

Hello, World!

text print text on the same line

Python 3

print('Hello, World!')

print("some text,", end="")

print(' print text on the same line')

run result:

Hello, World!

some text, print text on the same line

(2)通过input()解析用户的输入:(Python 3中input得到的为string;Python 2的input的到的为int型,Python 2的raw_input得到的为string类型)统一一下:Python 3中用input,Python 2中用row_input,都输入为string

(3)整除:(没有太大影响)(Python3中/表示真除,%表示取余,//表示地板除(结果取整);Python2中/表示根据除数被除数小数点位得到结果,//同样表示地板除)统一一下:Python3中/表示真除,%表示取余,//结果取整;Python2中带上小数点/表示真除,%表示取余,//结果取整

(4)xrange模块

在 Python 3 中,range() 是像 xrange() 那样实现以至于一个专门的 xrange() 函数都不再存在(在 Python 3 中xrange() 会抛出命名异常)。

在 Python 2 中 xrange() 创建迭代对象的用法是非常流行的。比如: for 循环或者是列表/集合/字典推导式。

这个表现十分像生成器(比如。“惰性求值”)。但是这个 xrange-iterable 是无穷的,意味着你可以无限遍历。

由于它的惰性求值,如果你不得仅仅不遍历它一次,xrange() 函数 比 range() 更快(比如 for 循环)。尽管如此,对比迭代一次,不建议你重复迭代多次,因为生成器每次都从头开始。

原 :range( 0, 4 )结果 是 列表 [0,1,2,3 ]

改为:list( range(0,4) )

原 :xrange( 0, 4 )适用于 for 循环的变量控制

改为:range(0,4)

(5)字符串

原:字符串以 8-bit 字符串存储

改为:字符串以 16-bit Unicode 字符串存储

(6)try except 语句的变化

原: try:

          ......

     except    Exception, e :

         ......

改为

    try:

          ......

     except    Exception as e :

         ......

(7)打开文件

原:file( ..... )

    或 open(.....)

改为:

只能用 open(.....)

(8)bytes 数据类型

bytes 可以看成是“字节数组”对象,每个元素是 8-bit 的字节,取值范围 0~255。

由于在 python 3.0中字符串以 unicode 编码存储,当写入二进制文件时,字符串无法直接写入(或读取),必须以某种方式的编码为字节序列后,方可写入。

(一)字符串编码(encode) 为 bytes

例:   s = "张三abc12"

       b = s.encode( 编码方式)   # b 就是 bytes 类型的数据

      # 常用的编码方式为 : "uft-16"    , "utf-8", "gbk", "gb2312", "ascii" , "latin1" 等

      # 注 : 当字符串不能编码为指定的“编码方式”时,会引发异常

(二) bytes 解码(decode)为字符串

      s = "张三abc12"

      b = s.encode( "gbk")    # 字符串 s 编码为 gbk 格式的字节序列

      s1 = b.decode("gbk")   # 将字节序列 b以gbk格式 解码为字符串

      # 说明,当字节序列不能以指定的编码格式解码时会引发异常

(三)使用方法举例

#coding=gbk

f = open("c:\\1234.txt", "wb")

s = "张三李四abcd1234"

# -------------------------------

# 在 python2.4 中我们可以这样写:

# f.write( s )

# 但在 python 3.0中会引发异常

# -------------------------------

b = s.encode("gbk")

f.write( b )

f.close()

input("?")

读取该文件的例子:

#coding=gbk

f = open("c:\\1234.txt", "rb")

f.seek(0,2) #定位至文件尾

n = f.tell() #读取文件的字节数

f.seek(0,0) #重新定位至文件开始处

b = f.read( n )

# ------------------------------

# 在 python 2.4 中 b 是字符串类型

# 要 python 3.0 中 b 是 bytes 类型

# 因此需要按指定的编码方式确码

# ------------------------------ 

s = b.decode("gbk")

print ( s )

# ------------------------------

# 在 python 2.4 中 可以写作 print s 或 print ( s )

# 要 python 3.0 中 必须写作 print ( s )

# ------------------------------ 

f.close()

input("?")

运行后应显示:

张三李四abcd1234

(四) bytes序列,一但形成,其内容是不可变的

例:

s="ABCD"

b=s.encode("gbk")

print b[0]       # 显示   65

b[0] = 66   

# 执行该句,出现异常: 'bytes' object does not support item assignment

(9)chr( K ) 与 ord( c )

python 2.4.2以前

   chr( K )   将编码K 转为字符,K的范围是 0 ~ 255

   ord( c )   取单个字符的编码, 返回值的范围: 0 ~ 255

python 3.0

   chr( K )   将编码K 转为字符,K的范围是 0 ~ 65535

   ord( c )   取单个字符的编码, 返回值的范围: 0 ~ 65535

(10)字节数组对象 --- 新增

(一) 初始化

    a = bytearray(   10 )

     # a 是一个由十个字节组成的数组,其每个元素是一个字节,类型借用 int

     # 此时,每个元素初始值为 0

(二) 字节数组 是可变的

    a = bytearray(   10 )

     a[0] = 25

     # 可以用赋值语句更改其元素,但所赋的值必须在 0 ~ 255 之间

(三)   字节数组的切片仍是字节数组

(四)   字符串转化为字节数组

     #coding=gbk

     s ="你好"

     b = s.encode( "gbk")     # 先将字符串按某种“GBK”编码方式转化为 bytes

     c = bytearray( b )          #再将 bytes 转化为 字节数组

     也可以写作

     c = bytearray( "你好", "gbk")

(五)   字节数组转化为字符串

      c = bytearray( 4 )

       c[0] = 65 ; c[1]=66; c[2]= 67; c[3]= 68

      s = c.decode( "gbk" )

       print ( s )

      # 应显示: ABCD           

(六) 字节数组可用于写入文本文件

#coding=gbk

f = open("c:\\1234.txt", "wb")

s = "张三李四abcd1234"

# -------------------------------

# 在 python2.4 中我们可以这样写:

# f.write( s )

# 但在 python 3.0中会引发异常

# -------------------------------

b = s.encode("gbk")

f.write( b )

c=bytearray( "王五","gbk")

f.write( c )

f.close()

input("?")

---------------------

这部分是来自CSDN的作者刺客五六柒的文章,我看总结得很详细,就贴了一部分过来

原文:https://blog.csdn.net/qq_39521554/article/details/80855086


4、python标识符

标识符只有数字,字母,下划线;但是命名不能以数字开头;并且严格区分大小写;

以下划线开头的是有特殊意义的,以单下划线开头的代表不能直接访问的类和属性,需通过类的接口进行访问,不能用 from xxx import * 导入;

以双下划线开头的代表类的私有成员;

以双下划线结尾的代表python里特殊方法专用的标识,如__init__()代表类的构造函数;

5、python允许同一行显示多条语句,用分号隔开。

6、python的保留字符

keyword.kwlist = ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 

                            'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 

                            'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal',

                             'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

7、命名方法

驼峰式命名:firstName lastName

Pascal命名:FirstName LastName

全大写命名:FIRSTNAME LASTNAME

全小写命名:firstname lastname

下划线命名:first_name last_name

8、在python中,int并不是保留字,理论上可以作为变量名,但是可能会产生如下错误:

代码:int = 1;type(1) == int;

输出:False

9、多行语句

可以用斜杠(\)将一行语句分为多行显示,但是语句中包含[],{}或()时,不需要连接符

10、数字

复数:复数由实数部分和虚数部分构成,可以用 a+bj,或者 complex(a,b) 表示 ,a和b均为浮点型

布尔值:在Python 2中是没有布尔型的,它用数值 0 表示 False,用 1 表示 True ,在Python 3中,把 True 和 False 定义成了关键字,它们的值还是0和1,它们可以和数字相加。可以使用bool()函数来检测某值的布尔值。

    布尔值为False的:0 ,0.0 ,"" ,() ,[] ,{} ,None

常量:在python中通常用全部大写的变量名表示常量:PI = 3.14159265359

11、表达式

很多种表达式。

Q:已有b = 2,请问此时想将a赋值为2以下哪个最快?(1) a = 2; (2) a = b;

A:(2)更快。因为如果直接将a赋值为2,那么将会需要在堆中重新创建数字2的空间,再将栈中的a指向数字2,而若采用(2)中的办法,则所有操作都可以在栈区完成,速度更快。

你可能感兴趣的:(Python学习)