Bootstrap

python常用基础知识

目录

(1)print函数

(2)注释

(3)input函数

(4)同时赋值和连续赋值

(5)type函数和id函数

(6)python赋值是地址赋值

(7)基本运算符和增强型赋值运算符

(8)科学记数法

(9)类型转换

(10)eval函数

(11)删除变量

(12)一条语句多行显示和多条语句一行显示

(13)dir函数

(14)help函数

(15)os.system函数

(16)输入输出重定向

(17)round函数

(18)ASCII 编码、ord函数和chr函数

(19)统一码

(20)转义序列

(21)用%或 format 在字符串里面插入变量值

%用法

format用法

(22)用 format 函数格式化数字和字符串

1.格式化浮点数

2.格式化为科学计数法形式

3.格式化为百分数形式

4.格式化整数

5.格式化字符串

(23)整数不同进制之间的转化

(24)汉字和英文字符比较

长度比较

占用字符个数比较

(25)python2和python3区别

字符串编码区别

除法符号/区别

(26)python设置代码编码方式

(27)字符串编码处理

bytes 函数

decode 和 encode 函数

codecs 模块

(28)排列和组合


(1)print函数

打印一个段落:用三个双引号

print("""锄禾日当午, 
汗滴禾下锄。 
谁知盘中餐, 
粒粒皆辛苦。
""")

end参数:参数 end 的默认值是换行符"\n",即打印内容后自动换行,也可以指定为其它内容

print("AAA", end="x") 
print("BBB", end=' ')
print("CCC", end='***')
# AAAxBBB CCC***
sep参数:print传入多个变量打印时,变量之间用什么符号进行间隔,默认是空格
print(1, 2, 3)              # 1 2 3
print(1, 2, 3, sep="###")   # 1###2###3

(2)注释

# 注释行
# 这里是注释内容

# 注释段,三个单引号
''' 注释内容
注释内容
注释内容
'''

注释多行也可以用三个双引号

"""
注释内容
注释内容
"""

快速给多行代码添加和取消注释:ctrl + /。它会给多行代码每行添加#。

(3)input函数

作用:从控制台读取输入。参数为提示内容,返回值为字符串。

string = input("请输入内容:")
radius = eval(input("请输入半径:"))
print(string)
print(radius)

(4)同时赋值和连续赋值

# 1.同时赋值
# 重要应用:交换变量值
x, y, z = 1, 2, 5
print(x, y, z)

x, y = y, x
print(x)
print(y)

a, b, c = eval(input("请用英文逗号隔开输入三个数字:"))  # 2, 4, 7
print(a, b, c)

# 2.连续赋值
x = y = 1
print(x, y)

(5)type函数和id函数

type函数:查看变量的类型

id函数:查看变量的内存地址

a = 1
print(type(a))  # <class 'int'>
print(id(a))   # 1387529267504
if type(a) == int:  # 类型判断
    print("a is int")

b = 1.0
print(type(b))  # <class 'float'>
if type(b) == float:  # 类型判断
    print("b is float")

c = complex(1, 2)  # python自带复数类型
print(type(c))   # <class 'complex'>
if type(c) == complex:  # 类型判断
    print("c is complex")

d = None
print(type(d))  # <class 'NoneType'>
if d is None:  # 类型判断
    print("d is None")

e = [1, 2, 3]
print(type(e))  # <class 'list'>
if type(e) == list:
    print("e is list")
    
f = {"ZhangSan": 18, "Tom": 19}
print(type(f))  # <class 'dict'>
if type(f) == dict:
    print("f is dict")

(6)python赋值是地址赋值

以x=y为例,地址赋值的意思就是将y的值赋值x,x的地址值为y的地址

x = 3
y = 3
print(id(x), id(y))   
# 2471996909936 2471996909936 # 地址相同

value = 100
m = value
n = value
print(id(value), id(m), id(n))   
# 2471997101520 2471997101520 2471997101520 # 地址相同

lst = [1, 2, 3]
lst1 = lst
lst2 = lst
print(id(lst), id(lst1), id(lst2))  
# 2472002138432 2472002138432 2472002138432 # 地址相同

(7)基本运算符和增强型赋值运算符

基本运算符

符号含义举例

加法34+1
减法34-1
*乘法300*10
/除法1/2,返回0.5
//整除1//2,返回0
**4**0.5,返回2
%取余20%3,返回2

增强型赋值运算符,由算术运算符和=组成

以*=为例,i*=8就是i=i*8的简写

x = 1
x += 3
print(x)  # 4

y = 2
y *= 3
print(y)  # 6

(8)科学记数法

浮点数可以用 a × 10**b 形式的科学计数法来编写
比如 123.456 的科学计数法为 1.23456 × 10** 2 0.0123 的科学计数法为 1.23 × 10**( −2)
python 1.23456 × 10** 2 被写作 1.23456E+2 或者 1.23456E2 ,而 1.23 ×10**( −2) 被写作 1.23E-2
x = 1.23456E+2
print(x)  # 123.456

y = 1.23456E2
print(y)  # 123.456

z = 1.23E-2
print(z)  # 0.0123

(9)类型转换

要转化为什么类型就用什么类型的函数

int函数:取浮点数的整数部分

float 函数:整数变浮点数
print(int(5.6)) # 5
print(float(5)) # 5.0
int 函数也可以将整数字符串转换为整数,比如 int("34")返回 34
注意的是 int 函数只能是整数字符串的转换,比如 int("3.4") 会报错
int 函数将整数字符串转换为整数时还可以有第二个参数,第二个参数表示这个整数的进制,返回对应 10 进制的整数
print(int("10", 8)) # 8
print(int("12", 8)) # 10

str函数:转化为字符串

x = 123
ret = str(x)
print(type(ret))  # <class 'str'>
print(ret)  # 123

list函数:转化为list

x = (1, 2, 3)
ret = list(x)
print(ret)  # [1, 2, 3]

y = "abc"
ret = list(y)
print(ret)  # ['a', 'b', 'c']

(10)eval函数

eval函数十分强大,参数传入python类型数据的字符串,能主动识别字符串以应该返回什么数据

a = "123"
ret = eval(a)
print(type(ret))  # <class 'int'>
print(ret)  # 123

b = "3 + 4"
ret = eval(b)
print(type(ret))  # <class 'int'>
print(ret)  # 7

c = "[5,  6,    7]"
ret = eval(c)
print(type(ret))  # <class 'list'>
print(ret)  # [5, 6, 7]

d = "{'a':  1,   'b':   'xxxxx'}"
ret = eval(d)
print(type(ret))  # <class 'dict'>
print(ret)  # {'a': 1, 'b': 'xxxxx'}

(11)删除变量

语法:del varName

作用:内存回收

num = 1
print(num)  # 1

del num
print(num) # NameError: name 'num' is not defined

(12)一条语句多行显示和多条语句一行显示

# 一行变多行
# 法一,加反斜号
x = 2
if x % 2 == 1 and \
 x > 50:
 print(x)

# 法二,加括号
x = 2
if ( x % 2 == 1 and
 x > 50):
 print(x)

# 多行变一行,用分号
num1 = 1 ; num2 = 4 ; num3 = 5 ; print(num1, num2, num3)

(13)dir函数

作用:查看一个模块或者一个类的所有属性和方法

import math
print(dir(math))
"""
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
"""

(14)help函数

作用:查看一个函数或者方法的详细用法

import os
help(os.path.join)
"""
Help on function join in module ntpath:

join(path, *paths)
    # 

(15)os.system函数

作用:运行系统的命令

以windows为例

import os
os.system("calc") # 打开计算器
os.system("notepad") # 打开记事本
os.system("echo mystrxxx") # 打印文本
os.system("task kill /f /im notepad.exe") # 关闭记事本
os.system("task kill /f /im QQ.exe") # 关闭 QQ
# 用代码打开软件
os.system("\"C:\\Program Files (x86)\\Tencent\\WeChat\\WeChat.exe\"") 

(16)输入输出重定向

输出:以print函数为例,默认输出到输出设备比如屏幕上

输入:以input函数为例,默认手动从键盘获取输入

输入输出重定向的意思就是改变输出或者输入源

现在我们进行“输入输出重定向”

输入重定向

从 txt 文本文件中输入
 python 文件名.py < 输入文件名.txt 

每次读取一行(只读取一次的话,就是读取第一行的文本/数据)

输出重定向

将输出显示在 txt 文本文件中
python 文件名.py > 输出文件名.txt 
# 写入文本覆盖 # 若文件不存在则创建一个新文件

python 文件名.py >> 输出文件名.txt  
# 追加模式
方便的句式
python 文件名.py < 输入文件名.txt >> 输出文件名.txt

(17)round函数

round(x):将x这个浮点数四舍五入为整数

round(x, n):浮点数小数位四舍五入保留n位

(18)ASCII 编码、ord函数和chr函数

ASCII 编码

  • 字符编码的方式有很多
  • 流行的编码标准是 ASCII 编码(美国信息交换标准代码),使用 0 127 来表示字符ASCII 一共 128
  • 对应键盘上的128个符号,每个符号对应一个ASCII值,从0 127
  • 十进制中,数字 0 ASCII 码是 48,字母 A ASCII 码是 65,字母 a ASCII 码是 97
  • 任何小写字母的 ASCII 码减去其大写字母的 ASCII 码都是 32

ord函数

ord(ch)来返回字符 ch 的 ASCII 码

chr函数

chr(ASCII值)来返回该 ASCII 码所代表的字符
x = ord('a')
print(x)  # 97

s = chr(x)
print(s)  # a

y = ord('A')
print(x - y)  # 32

(19)统一码

python 也支持统一码,unicode
统一码是一种编码表, ASCII 码是统一码的子集
统一码由统一码协会建立, 支持世界上各种语言所写的文本进行交换、处理和展示
统一码以 “\u” 开始,从 "\u0000" "\uFFFF"
print("\u6B22")  # 欢
print("\u8FCE")  # 迎
print("\u3434")  # 㐴

汉字 Unicode 编码范围:中文字符集 Unicode 编码范围

(20)转义序列

\和紧跟着单双引号斜线或者字母的组合被称为转义序列

常用的转移序列有:

  • \t 是制表符,就是一个 tab 键,相当于缩进四个空格
  • \b 是退格符,在打印时向后退一个空格,作用是将后面那个字符给消除掉了
  • \n 是换行符,换行符后的内容将在下一行打印出来
  • \"\'\\,表示将双引号、单引号或斜线不具有其它的含义,单纯只是符号,而不像字符串双引号具有作用
  • 其它转义序列
print("He said, \"John's program is easy to read\"")

# 同时使用单引号和双引号,也可起到转义序列的作用
sayHello = '他说:"你好啊"。'
print(sayHello)

print("ab\bcd")  # "acd"

print("\tabcd")  # "   abcd"

print("ab\ncd")  # cd 在 ab 的下一行

print(r"C:\Users\xxxx\Desktop\tools")  # 用 r 解决时,不用输入转义字符

# \t 是制表符,默认占 4 个空格大小的位置
s = "11\t2\t3"
print(len(s))
print(s)
print("11xx2xxx3")
'''
6
11	2	3
11xx2xxx3
'''

(21)%format 在字符串里面插入变量值

%用法

% 语法

%c 字符,%d 整数,%s 字符串,%f 浮点数,%e 科学计数形式
a = 100
b = 297.364
c = 15487.275
mystr1 = "我卖了%d 个商品,每个卖%.2f 元,利润是%.2f 元" % (a, b, c)
print(mystr1)


print("hello %% %f" %(10.5))  #
# %%代表输出一个%,为了区别


mystr3 = "我卖了%d 个商品,每个卖%-10.2f 元,利润是%10.2f 元"%(a, b, c)
# 默认右对齐,-表示左对齐
print(mystr3)
# 我卖了 100 个商品,每个卖 297.36 元,利润是 15487.27 元


mystr4 = "我卖了%d 个商品,每个卖%010.2f 元,利润是%010.2f 元"%(a, b, c)
# 宽度为 10,默认填充空格,设置填充 0
print(mystr3)
# 我卖了 100 个商品,每个卖 0000297.36 元,利润是 0015487.27 元

format用法

format 语法(巧记:冒号 4.2)
a = 100
b = 297.364
c = 15487.275
mystr2 = "我卖了{}个商品,每个卖{:.2f}元,利润是{:.2f}元".format(a, b, c)
print(mystr2)
将整数 5 格式化 05 的方法: {:02d}
mystr1 = "中间{:02d}是个数".format(5)
mystr2= "中间{:03d}是个数".format(5)
mystr3= "中间{:0003d}是个数".format(5)
print(mystr1) # 05
print(mystr2) # 005
print(mystr3) # 005

第二种方法:

ret = format(5, "02d")
print(type(ret))  # <class 'str'>
print(ret)  # 05

format简化用法:

num = 5
ret = f"这里有{num}个公司"
print(type(ret))  # <class 'str'>
print(ret)  # 这里有5个公司

(22)format 函数格式化数字和字符串

调用这个函数的语法是: format(item, format-specifier) 
此函数返回的是一个字符串
对浮点数保留两位小数
interest = 16.404674
interest = round(interest,2)
print(interest) # 16.4
然而我们想要的是 16.40 这种效果
interest = format(interest, ".2f")
print(interest) # 16.40

1.格式化浮点数

示例
interest = 16.404674  # interest 是要格式化的浮点数
interest = format(interest, "^10.3f")
print(interest) # " 16.405 "
用法讲解:
  • <表示左对齐,>表示右对齐,^表示居中对齐,不设置时默认为右对齐
  • 10 表示整个字符串占的宽度,不设置时默认为浮点数本身的宽度。如果字符串超过设置的宽度则默认为字符串的宽度,如果不够则自动填充空格。
  • 3 表示保留的小数位数
  • f表示是格式化浮点数

2.格式化为科学计数法形式

f 换成了 e
s1 = format(14.6273, "10.2e")
s2 = format(0.0146273, "<10.3e")
print(s1)  # " 1.46e+01"
print(s2)  # "1.463e-02 "

3.格式化为百分数形式

f 换成了%
s1 = format(14.6, "<10.2%")
s2 = format(0.0142, "10.3%")
print(s1) # “1460.00% ”
print(s2) # “ 1.420%”

4.格式化整数

b 表示转换为二进制,o 是八进制,d 是十进制,x 是十六进制
s1 = format(111, "<10b")
s2 = format(111, ">10o")
s3 = format(111, "^10d")
s4 = format(111, ">10x")
print(s1) # “1101111 ”
print(s2) # “ 157”
print(s3) # “ 111 ”
print(s4) # “ 6f”

将整数 5 格式化 05 的方法

ret = format(5, "02d")
print(type(ret))  # <class 'str'>
print(ret)  # 05

5.格式化字符串

有时用来统一宽度进而对齐打印很好用

只有字符串默认对齐方式左对齐
格式最后面的参数是 s
string = "Python is fun" 
s1 = format(string, "<20s")
s2 = format(string, ">20s")
s3 = format(string, "^20s")
s4 = format(string, "20s")
print(s1) # “Python is fun ”
print(s2) # “ Python is fun”
print(s3) # “ Python is fun ”
print(s4) # “Python is fun ”

(23)整数不同进制之间的转化

# 在赋值的时候确定进制,在数字前面加 0x,0o,0b
a = 0x10 # 16 进制的 10,就是 10 进制的 10
b = 10 # 10 进制的 10
c = 0o10 # 8 进制的 10
d = 0b10 # 2 进制的 10
print(a, b, c, d, sep = " || ") # 16 || 10 || 8 || 2
print(0b101 + 6) # 11
print(0b101 + 0x12) # 23

# 10 进制转为其他进制
print(hex(100)) # 10 进制转换为 16 进制 # 0x64
print(oct(10)) # 10 进制转换为 8 进制 # 0o12
print(bin(10)) # 10 进制转换为 2 进制 # 0b1010

(24)汉字和英文字符比较

长度比较

一个汉字是一个字符
一个英文字母是一个字符
s1 = "你好"
print(len(s1)) # 2
s2 = "ab"
print(len(s2)) # 2

占用字符个数比较

以存储到txt文为例

一个汉字占用 3 个字节的内存(utf-8编码时),或者占用2个字节的内存(gbk编码时)
一个英文字母占用 1 个字节的内存
print(bytes("我", "utf-8"))  # b'\xe6\x88\x91'
print(bytes("我", "gbk"))    # b'\xce\xd2'
print(bytes("x", "gbk"))    # b'x'
print(bytes("x", "gbk"))    # b'x'

(25)python2和python3区别

字符串编码区别

在 python2 中,普通字符串是以 8 位 ASCII 编码进行存储的

在 python3 中,所有字符串都是 Unicode 编码

Unicode 字符串则存储 16 位 unicode 字符串,这样就能够表示更多的字符集,使用的语法是在字符串前面加前缀 u
unicode 有若干种格式:utf-8,unicode-8,unicode16,gbk
python3 默认字符串是 unicode 中的 utf-8 格式

除法符号/区别

python2中类似c语言是取整,返回除法结果的整数位

python2中就是数学上的除法,返回浮点数

(26)python设置代码编码方式

在代码最方面的第一行加上以下语句

# -*- coding: utf-8 -*-

或者

#coding=utf-8

(27)字符串编码处理

bytes 函数

byte 转化为二进制编码,1 个字节
b = bytes(1) # byte 转化为二进制编码,1 个字节
print("bytes(1) = ", b) # b'\x00'
# \x16 进制 2^4=16 一位数的 16 进制相当于 4 位
# 所以 2 位数 16 进制相当于 8 位 (1 个字节)
utf-8 和 gbk :不同的编码大小不一样内容不一样
print("-"*10)
a = bytes("你 abc", "utf-8")
print(a) 
a = bytes("你 abc", "gbk")
print(a)  

# utf-8 一个汉字占 3 个字符,前面两个字符表示汉字,最后那个字符表示结束
print("-"*10)
print(bytes("我", "utf-8"))
print(bytes("我的", "utf-8"))
print(bytes("我的喔", "utf-8"))

# GBK 一个汉字用两个字符表示,没有结束
print("-"*10)
print(bytes("我", "gbk"))
print(bytes("我的", "gbk"))
print(bytes("我的喔", "gbk"))

运行结果

----------
b'\xe4\xbd\xa0 abc'
b'\xc4\xe3 abc'
----------
b'\xe6\x88\x91'
b'\xe6\x88\x91\xe7\x9a\x84'
b'\xe6\x88\x91\xe7\x9a\x84\xe5\x96\x94'
----------
b'\xce\xd2'
b'\xce\xd2\xb5\xc4'
b'\xce\xd2\xb5\xc4\xe0\xb8'

decode encode 函数

decode:解码
encode:编码
print(b'\xce\xd2\xb5\xc4\xe0\xb8')
print(b'\xce\xd2\xb5\xc4\xe0\xb8'.decode("gbk"))

# decode 方法,将二进制转化为文本字符串,制定编码格式
print("你好中国".encode("utf-8"))
print(b'\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\xad\xe5\x9b\xbd'.decode("utf-8"))

# decode, encode:编码一致,编码不一致时会乱码或者编码出错
# print(b'\xce\xd2\xb5\xc4\xe0\xb8'.decode("utf-8")) # 这里会报错

# encode 方法,文本字符串编码为二进制编码
print(type("hello".encode("utf-8")))
print(type(b'\xce\xd2\xb5\xc4\xe0\xb8'.decode("gbk")))

# 英文字母,两种编码都可以
# 汉字注意编码的格式

# "ignore",解码失败,强行解码
# b 开头是 bytes
print(b'\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\xad\xe5\x9b\xbd'.decode("gbk", "ignore"))

# 第一个参数:设置编码
# encoding = "utf-8"
# 第二个参数:默认是'strict',其他有'replace','ignore'
# errors = "ignore"

codecs 模块

打开文件时对编码的处理更为精细
import codecs

filename = r"./data/record.txt" 
file = codecs.open(filename, "rb", "gbk", "ignore")
name = input("输入要查询的负心人:")

n = 0
i = 0

for line in file:
    n += 1
    if line.find(name) != -1:
        i += 1
        print(line)

print(f"一共{i}/{n}条")

(28)排列和组合

from itertools import combinations, permutations

# 组合 combinations
# 排列 permutations

s = "ABCD"
lst = list(s)

# 排列
list1 = list(permutations(lst, len(lst)))  # 第二个参数为要选取的个数
print(list1)

# 组合
list2 = list(combinations(lst, 2))
print(list2)

end

;