1、变量和数据类型

1.1变量

  1.每个变量都存储了一个值——与变量相关联的信息。

  2.变量不仅可以为整数或浮点数,还可以是字符串,可以是任意数据类型。

1.1.1变量的命名和使用

变量名只能包含字母、数字和下划线,且数字不能打头。变量名不能包含空格,但可以使用下划线间隔。不能把python关键字和函数名作为变量名。变量名应既简短又具有描述性。慎用小写字母l和大写字母O,容易和1,0混淆。

1.1.2使用变量时避免命名错误

  出现错误时解释器会提供一个traceback(回溯)。Traceback是一条记录,指出了什么地方出现错误,显示错误提示。

1.2字符串str

  1.字符串就是一系列字符。是一种数据类型,在Python中用引号括起的都是字符串,可单引号也可双引号

  2.Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。把Unicode编码转化为“可变长编码”的UTF-8编码。

  3.Python对bytes类型的数据用带b前缀的单引号或双引号表示:x = b'ABC'。以Unicode表示的str通过encode()方法可以编码为指定的bytes。



>>> 'ABC'.encode('ascii')
b'ABC'



反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:



>>> b'ABC'.decode('ascii')
'ABC'



4. 对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:



>>> ord('A')
65
>>> ord('中')
20013
>>> chr(66)
'B'
>>> chr(25991)
'文'



  5.要计算str包含多少个字符,可以用len()函数,len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数。可见,1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节。

  6.当num<0时,bin(num + 2**32),转化为16位的二进制。也可以用bin(num & 0xffffffff)转化为16位的二进制,两种方法效果是一样的。

  7.二进制表示法:前缀为0b的字符串,'0b1110',用bin()把数字转换为二进制。>>> bin(14)  表示为'0b1110'

>>> hex(14) 表示为 '0xe'

>>> oct(14)  表示为 '0o16'

  10.使用int( )可以把其他进制转换为10进制.



>>> int('1001', 2)
9
>>> int('2333', 16)
9011



1.2.1对字符串的操作

  •   title() 以首字母大写的方式显示每个单词,即将每个单词的首字母都改为大写。
  •   upper() 将字符串改为全部大写。lower()将字符串改为全部小写。
  •   capitalize() 将字符串的第一个字符转换为大写。
  •   如果字符串至少有一个字母,并且所有字母都是大写或小写,isupper()和 islower()方法就会相应地返回布尔值 True。否则,该方法返回 False。
  •   salpha() 返回 True,如果字符串只包含字母,并且非空;
  •   isalnum() 返回 True,如果字符串只包含字母和数字,并且非空;
  •   sdecimal() 返回 True,如果字符串只包含数字字符,并且非空;
  •   sspace() 返回 True,如果字符串只包含空格、制表符和换行,并且非空;
  •   istitle() 返回 True,如果字符串仅包含以大写字母开头、后面都是小写字母的单词。
  •   startswith()和 endswith()方法返回 True,如果它们所调用的字符串以该方法传入的字符串开始或结束。否则,方法返回 False。
  •   count() 返回str在字符串中出现的次数。可以指定范围,添加参数beg 或者 end。
  •   join()方法在一个字符串上调用,参数是一个字符串列表,返回一个字符串。
>>> ', '.join(['cats', 'rats', 'bats'])
'cats, rats, bats'
>>> ' '.join(['My', 'name', 'is', 'Simon'])
'My name is Simon'
 >>> 'ABC'.join(['My', 'name', 'is', 'Simon'])
'MyABCnameABCisABCSimon'
  • split()方法做的事情正好相反:它针对一个字符串调用,返回一个字符串列表。也可以向split()方法传入一 个分割字符串,指定它按照不同的字符串分割。
>>> 'My name is Simon'.split()
['My', 'name', 'is', 'Simon']
  • rjust()和 ljust()字符串方法返回调用它们的字符串的填充版本,通过插入空格来对齐文本。这两个方法的第一个参数是一个整数长度,用于对齐字符串。rjust()和 ljust()方法的第二个可选参数将指定一个填充字符,取代空格字符。
>>> 'Hello'.rjust(20, '*')
'***************Hello'
 >>> 'Hello'.ljust(20, '-')
'Hello---------------'
  •     center()字符串方法与 ljust()与 rjust()类似,但它让文本居中,而不是左对齐或右对齐。
  •   sort()将字符串排序。
  •   注意,Python对大小写很敏感,如果写错了大小写,程序会报错。
  •        合并——Python使用加号+来合并字符串。
  •    删除空白:方法rstrip()右,   lstrip()左,   strip()两边,strip()也可以带参数,删除指定内容。
  •   语法错误:在用单引号括起的字符串中,如果包含撇号,就将导致错误。双引号不会。
  •   Print() 打印,添加逗号会空一格。
  •   pyperclip 模块有 copy()和 paste()函数,可以向计算机的剪贴板发送文本,或从它接收文本。
  •   字符串有个replace()方法,可以替换指定内容。
>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'

1.2.2空值

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

1.2.3常量

 常量就是不能变的变量,比如常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量:PI = 3.14159265359。

1.2.4赋值

 在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量:



>>>a = 123 # a是整数
>>>print(a)
123
>>>a = 'ABC' # a变为字符串
>>>print(a)
 'ABC'



 赋值语句:a, b = b, a + b,这种赋值非常方便。用这种赋值可以很轻松的构造斐波那契数列:



1 fib = [0, 1]  # 构造fib数列
2 a, b = 0, 1
3 while b < 1000:
4     a, b = b, a + b
5     fib.append(b)
6 
7 print(fib)
8 
9 输出:[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597]



1.2.5格式化

  Python中格式化有两种,第一种用%实现,第二种{ } format格式。

 % 运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。常用占位符:

  • %d  整数
  • %f  浮点数
  • %s  字符串
  • %x  十六进制整数

  其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数:



>>> '%2d-%02d' % (3, 1)
' 3-01'
>>> '%.2f' % 3.1415926
'3.14'



  如果你不太确定应该用什么,%s永远起作用,它会把任何数据类型转换为字符串。有些时候,字符串里面的%是一个普通字符,需要转义,用%%来表示一个 % 。

  第二种格式化方法,format,通过 {} 来代替 % 。

1、正常使用



>>> print("我叫{},今年{}岁了".format("小李", 20))
我叫小李,今年20岁了



2、还可以通过在括号里填写数字,修改格式化的顺序,0为第一个参数,1为第二个参数。



>>> print("我叫{1},今年{0}岁了".format("小李", 20))
我叫20,今年小李岁了



3、通过key取变量,通过设定关键字,可以在 { }中直接指定关键字,不用管format中参数的顺序。



>>> print("我叫{name},今年{age}岁了".format(name="小李", age=20))
我叫小李,今年20岁了



1.2.6转义字符

  1. 空白——泛指任何非打印字符,如空格、制表符和换行符。
  2. 转义字符\可以转义很多字符 \t 制表符 ,\n 换行符。
  3. 字符\本身也要转义,所以\\表示的字符就是\ 。
  4. 如果字符串里面有很多字符都需要转义,Python中可以用 r''表示'' 内部的字符串默认不转义(原始字符串):
>>> print('\\\t\\')
\       \
>>> print(r'\\\t\\')
\\\t\\
>>> print(r'That is Carol\'s cat.')
That is Carol\'s cat.



1.3数字

1.3.1整数 int

  1. 计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等。
  2. 整数的除法是精确的。在Python中,有两种除法,一种除法是/ , /除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数。还有一种除法是//,称为地板除,两个整数的除法仍然是整数。
  3. % 取余数。
  4. ** 表示次方,例如 a**b,即 a 的 b 次方。
  5. pow(x, y)函数,计算x的y次方,例如:pow(2, 10) = 1024,pow(2, 15) = 32768 。

1.3.2浮点数float

  1. Python将带小数的数字都称为浮点数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是完全相等的。
  2. 对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等。
  3. 浮点数精确到小数后15位。

1.3.3复数complex

  1.使用complex()把数字转化为复数。 complex(2) ---> (2+0j)

  2.对于复数 z = 7 + 5j ,可以用z.real得到实数部分,z.imag得到虚数部分。

  3.复数的虚数部分通过加 j 或 J 来标识。

1.3.4使用函数str()避免错误

  1. 使用 type() 可以坚持数据类型,不过 type() 不能对class类的子集进行检查。
  2. 数据类型检查也可以用内置函数isinstance()实现,isinstance就可以对class类的子集进行检查,所有要看情况自己判断选择使用哪一个:
1 def my_abs(x):
2     if not isinstance(x, (int, float)):
3         raise TypeError('bad operand type')
4     if x >= 0:
5         return x
6     else:
7         return -x



1.4注释

1. 以#开头的语句是注释,注释是给人看的,可以是任意内容,解释器会忽略掉注释。其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块。



1 # 这是个注释



2.由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:



1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-



3.文档字符串的注释 , 用3对双引号表示,一般用于对函数或类的说明,   ”””      ”””

1.5Python之禅

在命令行中输入import this打印出python之禅

The Zen of Python, by Tim Peters

  1. Beautiful is better than ugly.
  2. Explicit is better than implicit.
  3. Simple is better than complex.
  4. Complex is better than complicated.
  5. Flat is better than nested.
  6. Sparse is better than dense.
  7. Readability counts.
  8. Special cases aren't special enough to break the rules.
  9. Although practicality beats purity.
  10. Errors should never pass silently.
  11. Unless explicitly silenced.
  12. In the face of ambiguity, refuse the temptation to guess.
  13. There should be one-- and preferably only one --obvious way to do it.
  14. Although that way may not be obvious at first unless you're Dutch.
  15. Now is better than never.
  16. Although never is often better than *right* now.
  17. If the implementation is hard to explain, it's a bad idea.
  18. If the implementation is easy to explain, it may be a good idea.
  19. Namespaces are one honking great idea -- let's do more of those!