likes
comments
collection
share

Python基础知识

作者站长头像
站长
· 阅读数 28

一、数据类型和变量

1. 整数

2. 浮点数

  • 很大或很小的浮点数需要用科学计数法表示,比如:1.23x109就是1.23e9,0.000012可以写成1.2e-5

3. 字符串

  • 可以用单引号和双引号表示,比如:'abc'"xyz"''""本身只是一种表示方式,不是字符串的一部分

  • 如果字符串内部既包含'又包含",可以用转义字符\来标识

  • 如果字符串里面有很多字符都需要转义,用r''表示''内部的字符串默认不转义,比如:

    >>> print('\\\t\\')
    \       \
    >>> print(r'\\\t\\')
    \\\t\\
    
  • 如果字符串内部有很多换行,Python允许用'''...'''的格式表示多行内容,比如:

    >>> print('''line1
    ... line2
    ... line3''')
    line1
    line2
    line3
    

    注意:...是提示符,不是代码的一部分

二、字符串和编码

1、字符编码

  • 在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
  • UTF-8编码将常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。
  • 推荐用UTF-8编码

2、字符串

(1) 编码相关
  • 最新的Python 3版本中,字符串是以Unicode编码的,支持多语言,比如

    >>> print('包含中文的str')
    包含中文的str
    
  • ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符,比如:

    >>> ord('中')
    20013
    >>> chr(66)
    'B'
    
  • Python的字符串类型是str,而内存中以Unicode表示,如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。Python对bytes类型的数据用带b前缀的单引号或双引号表示,比如:

    x = b'ABC'
    
  • encode()方法可以将Unicode表示的str编码为指定的bytes,比如:

    >>> 'ABC'.encode('ascii')
    b'ABC'
    >>> '中文'.encode('utf-8')
    b'\xe4\xb8\xad\xe6\x96\x87'
    

    需要注意的是:纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes。含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错

  • decode()方法可以将从网络或磁盘上读取的字节流(读到的数据是bytes)变为str,比如:

    >>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
    '中文'
    

    注意:如果bytes中只有一小部分无效的字节,可以传入errors='ignore'忽略错误的字节,也就是decode('utf-8', errors='ignore')

  • len()函数可以计算str的字符数,如果换成byteslen()函数就计算字节数,比如:

    >>> len('中文')
    2
    >>> len('中文'.encode('utf-8'))
    6 
    

    注意:可以看出,1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节。

  • 应当始终坚持使用UTF-8编码对strbytes进行转换。

(2)编码注意点
  • 当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
  • 必须并且要确保文本编辑器正在使用UTF-8 without BOM编码

(3)字符串格式化
  • %运算符来格式化字符串

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

    比如:

    >>> 'Hi, %s, you have $%d.' % ('xxq', 1000000)
    'Hi, xxq, you have $1000000.'
    >>> print('%.2f' %3.14159)
    3.14
    >>> print('%2d-%03d' %(3,1))
    3-001
    
  • %来转义%运算符,用%%来表示一个%,比如:

    >>> 'growth rate: %d %%' % 7
    'growth rate: 7 %'
    

三、使用list和tuple

1. list

(1)list的初始化
  • list是可变的有序的集合,可以很方便的初始化,比如:

    >>> classmates = ['Michael', 'Bob', 'Tracy']
    >>> classmates
    ['Michael', 'Bob', 'Tracy']
    
  • list中的元素可以是不同的类型,比如:

    >>> L = ['Apple', 123, True]
    
(2)list的常见操作
  • len()函数可以获取list的长度

  • 可以直接用索引值来访问元素,支持负数索引,比如:

    >>> classmates[2]
    'Tracy'
    >>> classmates[-1]
    'Tracy'
    
  • 向list中添加新的元素,包括追加到末尾,以及插入到指定位置:

    • 追加到末尾:append

      >>> classmates.append('Adam')
      >>> classmates
      ['Michael', 'Bob', 'Tracy', 'Adam']
      
    • 插入到指定位置:insert

      >>> classmates.insert(1, 'Jack')
      >>> classmates
      ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
      
  • 删除元素

    • 删除末尾元素:pop

      >>> classmates.pop()
      'Adam'
      
    • 删除指定位置的元素:pop(i)

      >>> classmates.pop(1)
      'Jack'
      
  • 替换指定位置元素,直接用索引赋值就好,比如:

    >>> classmates[1] = 'Sarah'
    
(3)list的特殊场景
  • list中可以包含list,形成多维数组,比如:

    >>> s = ['python', 'java', ['asp', 'php'], 'scheme']
    >>> len(s)
    4
    

    要取出上述例子中的'php',就可以这样:

    >>> s[2][1]
    'php'
    
  • 可以用sort()函数来对list进行排序,比如:

    >>> a = ['c', 'b', 'a']
    >>> a.sort()
    >>> a
    ['a', 'b', 'c']
    

2. tuple

(1)基本特点
  • 也是一种有序列表,和list很像

  • tuple是不可变的,一旦初始化就不能修改,所以没有跟修改有关的方法,比如append,intsert,也不能进行赋值操作

  • 如果可能,能用tuple代替list就尽量用tuple

  • 当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来,比如:

    t = (1, 2)
    

    或者定义一个空的tuple:

    >>> t = ()
    >>> t
    ()
    
(2)特殊情况
  • 特别需要注意的是,要定义一个只有1个元素的tuple,必须加在元素后面加上,,比如:

    >>> t = (1,)
    >>> t
    (1,)
    
  • tuple是不可变的,指的是tuple中的元素的指向不可变,但是tuple指向的元素可以是能变化的,比如可以是一个list,比如:

    >>> t = ('a', 'b', ['A', 'B'])
    >>> t[2][0] = 'X'
    >>> t[2][1] = 'Y'
    >>> t
    ('a', 'b', ['X', 'Y'])
    

四、条件判断

1. 基本的用法

  • if语句的完整形式是:

    if <条件判断1>:
        <执行1>
    elif <条件判断2>:
        <执行2>
    elif <条件判断3>:
        <执行3>
    else:
        <执行4>
    
  • if的执行顺序是从上往下,如果为true,则执行对应缩进的代码块

2. 特殊的场景

  • if的判断条件可以简写,比如:

    if x:
        print('True')
    

    只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False

五、循环

1. for...in 循环

  • for...in循环用于将把list或tuple中的每个元素迭代出来,比如:

    sum = 0
    for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
        sum = sum + x
    print(sum)
    
  • 可以用range()函数生成一个整数序列,比如上面的例子就可以改为:

    sum = 0
    for x in range(11):
        sum = sum + x
    print(sum)
    
  • 还可以用list()函数将range()函数生成的序列转为list,比如:

    >>> list(range(5))
    [0, 1, 2, 3, 4]
    

2. while循环

while循环就是:只要条件满足,就不断循环,条件不满足时退出循环。比如我们要计算100以内所有奇数之和:

sum = 0
n = 99
while n > 0:
    sum = sum + n
    n = n - 2
print(sum)

3. break中断循环

在循环中,break语句可以提前退出循环,比如还是上面的例子中:

sum = 0
n = 99
while n > 0:
    sum = sum + n
    n = n - 2
    if n < 50: #当n = 49时,条件满足,就会执行break语句
    	break #break语句会结束当前循环,直接执行while循环后面的语句
print(sum)

上面本来是要计算100以内的奇数之和,加了break语句以后,50以内的奇数就不会计算了

4. continue跳过当前循环

在循环中,可以用continue语句跳过当前的这次循环,直接开始下一次循环:

n = 0
while n < 10:
    n = n + 1
    if n % 2 == 0: # 如果n是偶数,执行continue语句
        continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行
    print(n)

上面的例子本来是计算10以内的整数之和,加了continue语句以后就把偶数过滤掉了

六、使用dict和set

1. dict字典

(1)基本的特点
  • 使用键-值(key-value)存储,具有极快的查找速度
  • list比较,dict有以下几个特点:
    • 查找和插入的速度极快,不会随着key的增加而变慢;
    • 需要占用大量的内存,内存浪费多。
  • dict内部存放的顺序和key放入的顺序是没有关系
(2)基本的用法
  • 初始化可以一次性生成一个dict,比如:

    >>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
    
  • dict中取值的话直接用key来获取,把比如:

    >>> d['Michael']
    95
    
  • 修改某个key对应的值的话可以直接重新赋值, 比如:

    >>> d['Michael'] = 90
    >>> d['Michael']
    90
    

    注意:重复添加同一个key,后面的值会把前面的值覆盖掉

  • 判断某个key是否在dict中,可以通过in判断,比如:

    >>> 'Thomas' in d
    False
    

    也可以通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:

    >>> d.get('Thomas')
    >>> d.get('Thomas', -1) #如果不存在'Thomas',就会返回-1
    -1
    

    注意:返回None的时候Python的交互环境不显示结果。

  • 通过pop(key)方法删除一个key,对应的value也会删除, 比如:

    >>> d.pop('Bob')
    75
    >>> d
    {'Michael': 95, 'Tracy': 85}
    
(3)特殊情况
  • dict的key必须是不可变对象,因为dict通过哈希算法来计算key的位置,要保证hash的正确性,作为key的对象就不能变
  • 在Python中,字符串、整数等都是不可变的,可以作为key,但是list是可变的,就不能作为key

2. set集合

(1)基本特点
  • 和dict类似,也是一组key的集合,但是不存储value
  • 在set中,没有重复的key,重复的元素自动被过滤
  • 在set中,元素是无序的
(2)基本的用法
  • 初始化一个set需要传入一个list,比如:

    >>> s = set([1, 2, 3])
    >>> s
    {1, 2, 3} #不代表是有序的喔
    

    重复元素在set中自动被过滤:

    >>> s = set([1, 1, 2, 2, 3, 3])
    >>> s
    {1, 2, 3}
    
  • add(key)方法可以添加元素到set中:

    >>> s.add(4)
    >>> s
    {1, 2, 3, 4}
    

    注意:可以重复添加,但是不会起作用

  • remove(key)方法可以删除元素:

    >>> s.remove(4)
    >>> s
    {1, 2, 3}
    
  • 2个set可以做集合的交集和并集操作,比如:

    >>> s1 = set([1, 2, 3])
    >>> s2 = set([2, 3, 4])
    >>> s1 & s2
    {2, 3}
    >>> s1 | s2
    {1, 2, 3, 4}
    
(3)特殊情况
  • set和dict一样,key必须是不可变对象

3. 不可变对象

对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的

比如:

>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'

                            欢迎关注我的公众号查看更多精彩文章!

Python基础知识

转载自:https://juejin.cn/post/7365345063850999848
评论
请登录