廖雪峰Python教程阅读笔记——1. Python基础介绍

1. Python基础介绍

1.1 基础

1.1.1 格式

  1. #号用来注释

  2. 缩进,一般用4个空格。请严格遵守!

  3. 结尾时,缩进的语句视为代码块,相当于{}

  4. Python大小写敏感。

1.1.2 数据类型和变量

1. 整数

Python可以处理任意大小的整数。

2. 浮点数

  • 浮点数可以用科学计数法表示。1.23x10^5 可以用1.23e5标示。0.000123可以用1.23e-4表示。

  • 整数和浮点数在计算机内部存储方式不同,整数运算永远是精确的–包括整数除法运算;浮点数运算可能会有四舍五入的误差。

  • 整数的除法为啥是精确的?

    在Python中,有两种除法,一种是/

    
    >>>10/3
    
    3.3333333333333335
    

    /除法计算结果是浮点数,即使整除。

    还有一种是//,称为地板除,两个整数的除法结果依然是整数。

    
    >>>10//3
    
    3
    

    整数的地板除//依然是整数,即使除不尽。要做精确的除法,使用/即可。

3. 字符串

  • 字符串可以用''或者""括起来。

  • 转义字符:\n表示换行,\t表示制表符,\本身也要转义,可以用\\标示。

  • 注:

    1. 如果字符串内部有很多字符都需要转义,就需要加很多\n,Python允许使用r''表示''内部的字符串默认不转义。例如:
    
    >>>print('\\\\')
    
    \   \
    
    >>>print(r'\\\\')
    
    \\\\
    
    1. 如果字符串内部有很多换行,用\n写在一行里不好阅读,Pyhton允许'''...'''表示多行内容。

4. 布尔值

True or False 注意区分大小写。

5. 空值

空值None,类似于java语言的null

6. 变量

变量名必须是大小写英文数字_的组合,且不能以数字开头。Python是动态语言,使用之前不需要定义。

7. 常量

在Python中,通常用全部大写的变量名表示常量,实际上仍是一个变量,Python不提供任何保护机制,所以用全部的大写表示常量,只是一个习惯的用法。

1.2 字符串和编码

1.2.1 字符串编码

最早计算机8bit表示一个字节(byte)。一个字节最多能表示256个字符,最早只有127个字母(大小写字母、数字和一些符号),这个编码表被称为ASCII编码。

但是要处理中文,显然一个字节不够,至少两个字节,并且不能跟ASCII编码重复,因此,中国制定了GB2312编码。各个国家也有自己的编码。全世界的混在一起,避免不了冲突。因此Unicode诞生。

Unicode把所有的语言都包含在内。最常用的是两个字节表示一个字符(如果非常生僻的字符,就需要4个字节)。新问题出来了:如果统一用Unicode编码虽然问题解决了,但是如果您写的文档全部是英文的话,会浪费存储空间。为了解决此问题,又出现了新的编码可变长度的UTF-8

UTF-8编码根据Unicode字符根据不同的数字大小,编码成1-6个字节。常用的英文字母被编码成1个字节,常用的汉字通常是3个字节,只有生僻的汉字才会编码成4-6个字节。

注:计算机内存中统一使用Unicode编码,当需要存储到硬盘或传输的时候,就会转换为UTF-8编码。用记事本打开的UTF-8字符,被转换为Unicode字符到内存里,当保存的时候,再把Unicode转换为UTF-8保存到文件。

Python 3版本中,字符串是以Unicode编码,也就是说Python支持多语言。

Python字符串
  • 常用函数:

    ord() :获取字符的整数的表示.如果知道字符的整数编码,还可以用十六进制写str

 >>>'\u4e2d\u6587'
 '中文'

chr():把编码变成对应的字符。

len():计算str多少个字符。也可以计算多少个byteslen(b'ABC')=3

由于Python的字符串类型为str,在内存中以`Unicode`表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘,就需要把str转换为以字节为单位的`bytes`
  • Python对bytes类型数据都用带b的前缀的单引号或者双引号来表示
>>>x=b'ABC'
  要注意区分`'ABC'`和`b'ABC'`,前者是`Unicode`编码格式的字符串,后者是`bytes`类型的字符串,每个字符占一个字节。

  - `Unicode`可以通过`encode()`方法将字符串编码为指定的`bytes`。
>>>'ABC'.encode('ascii')
b'ABC'
>>>'中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
 - 反过来,如果我们从网络中或磁盘上读取了字节流,那么读到的数据就是`bytes`.要把`bytes`转换为`str`,就需要用`decode()`方法:
>>>b'ABC'.decode('ascii')
'ABC'
>>>b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'

注意:Python源代码也是一个文本文件,如果源文件中包含中文,在保存源码文件时,就务必制定为UTF-8编码。

Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上以下两行:

#!/usr/bin/env python 3
# -*- coding:utf-8 -*-

第一行注释为了告诉Linux/OS X系统,这是一个python可执行程序。windows系统会忽视该行。

第二行注释为了告诉Python解释器,按照UTF-8编码格式读取源代码。注:声明了UTF-8格式,并不代表文本文件是UTF-8编码格式,必须确保文本编辑器正在使用UTF-8 without BOM编码。

格式化

Python中,使用的格式化方式同C语言一致,用%来实现:


 >>>'Hello,%s' % 'world'

 'Hello,world'

1.3 listtuple

1.3.1 list

list是一种有序集合。list使用[]括号括起来。可以指定获取第index个元素的值testList[index],注意:从0开始.

如果要获取最后一个元素,可以使用testList[-1],获取倒数第index个元素,可以使用testList[-index],当然index<=len(testList)

  • 常用函数:

    1.list是一个有序列表,可以使用append()追加元素:testList.append('item')

    2.删除末尾元素,testList.pop(),如果删除指定位置的元素,使用testList.pop(i)

    3.把某个位置的元素替换成别的元素,可以直接给指定位置元素赋值:testList[i]='replaceItem'

    4.list元素中的元素也可以是list:testList=['a','b',['m','n'],'c'],包含list的列表可以使用类似二维数组,多维数组的形式获取元素值。

1.3.2 tuple

tuple元组,也是一种有序列表。与list非常类似,但是一旦初始化就不能修改。使用()来括起来。

因为tuple不可变,因此代码更安全。但是在定义的时候,tuple就必须被定下来。

  • 定义tuple

    当定义tuple时,用()括起来,如果只有一个元素,括号不能省略。并且后面要加个,号来避免跟数学表达式中的()产生歧义:

    
    >>>t=(1,)
    
    >>>t
    
    (1,)
    
  • tuple‘可变’情况

    tuple包含一个可变的对象,那么该tuple“可变”。例如:

    
    >>>testTuple = ('a','b',['l1','l2'],'c')
    
    >>>testTuple[2][0]='n1'
    
    >>>testTuple[2][1]='n2'
    
    >>>testTuple
    
    ('a','b',['n1','n2'],'c')
    

    可见,该tuple已经改变,tuple所谓的“不变” ,实际是各个元素的指向不变。

1.4 条件判断

1.4.1 条件判断

条件判断结果一般是:True或者False,注意大小写。

if ... else if ...可以简写成if ... elif ...ifelif后面跟:,然后再写代码块。

  • 再议input:

    input用来读取用户输入。temp = input('_input: '),等待用户输入。从键盘接收的默认是字符串

1.5 循环

Python提供了两种循环,一种是for ... in ...,依次把listtuple中的每个元素迭代出来。


>>> names

['I', 'am', 'OK', '!']

>>> for name in names '''...

... print(name)

执行该语句会依次输出:


I

am

OK

!

循环中常用的函数:range(n)可以生成一个整数序列,从0开始,小于n

第二种循环是while,只要条件满足,就不断循环。比如:


sum = 0

n = 99

while n>0:

    sum = sum + n

    n = n-2

print(sum)

1.6 字典dictset

1.6.1 dict

python内置了字典:dict的支持,dict全程为dictionary,在其他语言中也成为map对象,使用(key-value)存储。

>>> d={'Hello':100,'World':101,'!':102}
 >>> d['!']
 102

常用方法:

  1. 更新值:

    直接对元素赋值,会覆盖掉value.d['!']=111,则该d['!']的值更新为111

  2. 获取值:

    • 直接操作打印对应的元素dict[key]
    
    >>>d['Hello']
    
    100
    
    • get()方法,如果不存在返回None或者空,也可以返回指定的value,例:
    
    >>>d.get('Hello')
    
    100
    
    >>>d.get('Hellos',-1) ##如果没有'Hellos'对应的值,则返回-1
    
    -1
    
  3. 删除元素

    要删除一个key,使用d.pop(key)方法,该方法会删除指定元素,并输出所删除元素

    
    >>>d.pop('World')
    
    101
    

    注意:

    • list比较:

      1. 查找和插入速度快,不会随着key的增加,而变化。

      2. 需要占用较大的空间,已空间换取时间。

    • list不足

      1. 查找和插入的时间随着元素的增加而增加

      2. 占用空间少,内存浪费少

    • 必须要记住,dictkey一定是不可变的对象。如果使用可变的对象作为key,会报以下错误:

      
      >>> d={'a':'A','b':'B'}
      
      >>> d
      
      {'a': 'A', 'b': 'B'}
      
      >>> L=['aa','bb']
      
      >>> d[L]
      
      Traceback (most recent call last):
      
      File "<stdin>", line 1, in <module>
      
      TypeError: unhashable type: 'list'
      

1.6.2 set

>>> s=set(['a','a','a','b','c'])
>>> s
{'c', 'a', 'b'}

注:传入的参数作为一个list,而显示的{'c', 'a', 'b'}只是告诉你这个set中有三个元素,显示的顺序也不一定是'c', 'a', 'b',并且重复元素被自动过滤。

常用方法:

add(key):添加元素到set

remove(key):删除元素

set可以看成数学意义上的无序无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

 >>> s1=set(['a','b','c'])
 >>> s1
 {'c', 'a', 'b'}
 >>>
 >>>
 >>> s2=set(['b','c','d'])
 >>> s2
 {'c', 'b', 'd'}
 >>> s1&s2  ##交集
 {'c', 'b'}
 >>> s1|s2  ##并集
 {'b', 'c', 'a', 'd'}

setdict的唯一区别就是:没有存储对应的value,只有key

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值