Python 基础知识

发布时间: 更新时间: 总字数:2261 阅读时间:5m 作者: IP上海 分享 网址

Python 基础知识汇总

前言

开发工具:

  • 安装 ipython,方便命令行编辑:
pip install ipython==5.7.0
  • Pycharm
  • Vscode

基础

  • python 文件后缀
    • py 源代码文件
    • pyc 字节码文件
    • pyd Python 可直接调用的 C 语言动态链接库文件,一般只存在于 Windows 系统
    • pyi 文件是 PEP484 提案规定的一种用于 Python 代码类型提示(Type Hints)的文件
      • PEP(Python Enhancement Proposals) python 正式规范文档
      • 生成方式 pip install mypy stubgen xxx.py
    • pyo 优化后的字节码文件
    • pyx CPython 包源文件,一般用来编写 Python 的 C 扩展
    • pyw 一般只存在于 Windows 系统
    • pyd Python 的库文件(Python 版 DLL)、在 Linux 上是 so 文件
  • Python 不区分单引号(')和双引号("
  • 缩进:单个制表符
  • Python 的程序缺省是顺序执行的,而不像 c、java 和 golang 一样需要一个 main()的入口函数才能执行。这是脚本语言的特点

查看帮助

  • 在命令窗口执行:
# 本地web查看帮助
pydoc3

# 帮助
help(<>)

# 获取对象的所有属性和方法
dir(<>)

unicode

  • python 中,u'' 表示unicode
  • unicode 用两个字节表示一个字符,存纯英文会浪费,于是出现可变长的 UTF-8。UTF-8 中,英文占一个字节,汉字占三个字节
  • unicode 转换成 utf-8: u'我'.encode('utf-8') -> '\xe6\x88\x91'
  • utf-8 转换成 unicode: '\xe6\x88\x91'.decode('utf-8') -> u'\u6211'
  • 当 python 源码中包含中文时,要添加文件编码如下:
    • 满足正则表达式 ^[ \t\v]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+) 即可
# -*- coding: UTF-8 -*-
// or
#coding=utf-8

变量

Python 中的变量不需要声明类型,是弱类型语言,可以直接使用=号赋值。 命名规则:

  • _ 分隔变量单词
  • 变量区分大小写
  • 变量命令中前导 _ 的使用:
  • __xxx__ 是特殊变量,可以直接访问,不是 private 变量
  • _xxx 虽然我可以被访问,但是,请把我视为私有变量,不要随意访问
  • __xxx 不能直接从外部访问

全局标量

使用 global 关键字声明

global 变量名

运算符

  • ** 幂:3*4 表示:3333=81
  • / 除:x/y
  • // 取整除:4//3.0=1.0
  • % 取模:4%3.0=1
  • << 左移:把一个数的比特向左移一定数目(每个数在内存中都表示为比特或二进制数字,即 0 和 1)2 « 2 得到 8。——2 按比特表示为 10
  • >> 右移把一个数的比特向右移一定数目 11 » 1 得到 5。——11 按比特表示为 1011,向右移动 1 比特后得到 101,即十进制的 5。
  • & 安位与:5&3=11
  • not 布尔非:x = True; not y 返回 False。

说明:

  • 混合运行,计算顺序是从左到右的,() 可以改变计算顺序
  • 幂运算比取反运算优先级高

逻辑判断符

  • || <-> or
  • && <-> and
  • ! <-> not

数据类型

一切是皆对象

  • int
  • float
  • boolean: False, True
  • string
  • list
  • tuple
  • dict
  • set
  • file

容器使用来存放一些对象的数据结构。根据使用方式的不同,Python 提供了列表(list)元组(trupe)字典(dict)

字符串(string)

Python 字符串

列表(list)

Python 字符串

元组(tuple)

元组和列表很相似(元组是不可变的类别),唯一的区别是元组定义好之后,就不能在改动,定义:

a = (元素1,元素2,元素3...)

说明:

  • 若修改元组报错:TypeError: 'tuple' object does not support item assignment
  • 元组的索引、切片规则和数组相同
  • tuple() 函数的功能与 list() 函数基本上是一样的:以一个序列作为参数并把它转换为元组
  • tuple a=(1,)a=(1) 不同

字典(dict)

Python 中的字典就像是 Java 中的 map,存储 键值对。示例:

a = {}
a = {key1:value1,key2:value2}

说明:

  • 取值:a["key"]

  • 修改:a["key"] = "value"

  • 添加元素:a["new-key"] = "new-value"

  • 常用方法:

    • get()
    • keys()/values()/items()
    • pop()
    • update()
    • clear()
  • 字典dict 迭代的是 key

    • 如果要迭代 value,用 for value in d.itervalues()
    • 如果要同时,用 for k, v in d.iteritems()
  • dict 排序示例

>>> x = {"b": 2, "c": 4, "a": 1}
>>> sorted(x.items(), key=lambda i: i[1])
[('a', 1), ('b', 2), ('c', 4)]
>>> sorted(x.items(), key=lambda i: i[0])
[('a', 1), ('b', 2), ('c', 4)]

集合(set)

  • 集合用来保存不重复的元素
    • 存储整形、浮点型、字符串、元组,无法存储列表、字典、集合等可变的数据类型
    • Python 集合会将所有元素放在一对大括号 {} 中,用 , 分隔
    • 声明 x=set() 或 x=set(iteration) 或 y = {1, 2, 3},后者不能为空
  • 使用
    • 遍历 for in
    • 添加 add
    • 删除 delremove
    • 合并 set.union(set1, set2...) 或 z = x.union(y)
  • frozenset 冻结的集合

类型强制转化

type(str) 获取变量的类型,使用如下方法可以对类型进行强制转换:

  • int(1.2)
  • int(‘12’)
  • float(3)
  • bool(1)
  • bool(’')
  • unicode(100)
  • str(b) 将对象强制转化为字符串
  • long()

流程控制

条件语句

  • if..else..
love = True
if love== True:
    print "ilove you"
else:
    print "I not love you"
  • if..elif..else..
if ......:
    print "ilove you"
elif .......:
    print "...................................."
else:
    print "I not love you"

三目表达式

'event' if a%2 == 0 else 'odd'
'odd' if a%2 else 'event'

for 循环

  • for … in …
for i in range(5):
    Print i

说明:

  • 任何可迭代对象都可以作用于 for 循环,isinstance('abc', Iterable) 判断是否可迭代
  • range() 内置函数:range(初始值,终止值,步长)
    • 终止值:是采用小于,而不是小于等于,所以是满足条件的是不包含终止值的
    • 如:range(10, 5, -1)[2]
  • break 可以结束 forwhile 循环
  • continue 跳过后边的代码,立刻进入下一轮循环
  • 一行的实现
x = [1, 2, 3, 4]
y = [i for i in x if i%2==0]

while 循环

>>> i = 3;
>>> while i <5:
...     print i;
...     i = i + 1;
... else:
...     print("end of while.")
...
3
4
end of while.

说明:

  • else 是可选的,最后执行
# 输出到标准输出,print函数的默认输出等价于 sys.stdout.write(),只是 print 会自动换行,而 stdout 需要手动添加转义符 "\n"
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

# 输出到标准错误
print('hello world!', file=sys.stderr)
# shell 的实现
# >&2 echo "hi"

# 输出到文件
with open('test.log', 'a') as f:
    print('hello world!', file=f)

# 用 print 打印输出但不换行
print("...", end='')
sys.stdout.flush()  # 一定要支持,输出到屏幕

什么是模块

  • 一个.py文件就是一个模块。每个模块实现相对独立的功能,使用import指令导入模块。
  • 每一个包目录下面都会有一个 __init__.py 的文件,这个文件是必须存在的,否则,Python 就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有 Python 代码,因为__init__.py本身就是一个模块
import sys
print 'the command line argument are:'
for i in sys.argv:
    print i
print '\n\nThe PYTHONPATH is', sys.path, '\n'
  • 自己写的模块(.py 文件)一定不要与系统自带的模块重名,除非你想替代
  • from 模块名 import *from 模块名 import 对象

练习代码

str = "abcdef"
a_list = list(str)
a_list
# ['a', 'b', 'c', 'd', 'e', 'f']

a_tuple = tuple(a_list)
a_tuple
# ('a', 'b', 'c', 'd', 'e', 'f')

''.join(a_tuple)
'abcdef'
# -*- coding: utf-8 -*-


def t(arr):
    r = []
    for i, e in list(enumerate(arr)):
        if i%2:
            r.append((arr[i-1], e))
    if len(arr)%2:
        r.append((arr[-1], None))
    return r


def t2(arr):
    return [(arr[i], arr[i + 1] if len(arr) != i + 1 else None) for i in range(0, len(arr), 2)]


if __name__ == '__main__':
    print t(list('abcdef'))
    print t(list('abc'))

    print t2(list('abcdef'))
    print t2(list('abc'))
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数