韩顺平-零基础快速学Python17
韩顺平 | 零基础快速学Python(1~7)
环境准备
开发工具:IDLE、Pycharm、Sublime Text、Eric
、文本编辑器(记事本/editplus/notepad++)
Python特点:既支持面向过程OOP、也支持面向对象编程;具有解释性,不需要编程二进制代码,可以直接从源代码运行程序
运行原理:python.exe解释器程序,将源代码翻译成二进制码,提交给计算机执行
python安装:
安装路径建议不要有中文和空格,选择空间大的盘
Add python.exe to PATH,Path环境变量会添加python的安装目录,在不同路径下可以使用python.exe
查看安装成功否cmd:
dir
查看目录、
python.exe
exit()
,在cmd输入python,系统默认在当前目录下查找,如果没有则在PATH中依次查找并执行
>>> python hello.py # python.exe解释器
Pycharm
解释器配置
Settings > Python Interpreter > Add Interpreter > the path of python.exe
常用快捷键:
shift + delete 删除当前行
ctrl + D 复制当前行
ctrl + / 添加/取消注释
ctrl + alt + L
快速格式化
ctrl+shift+F10/shift+F10 快速运行程序,可自己定义alt+R(设置-KeyMap-搜索run)
ctrl + H 查看类的层级关系(体会面向对象OOP继承很有用)
ctrl + R 替换
常用的转义字符
\t 制表符,实现对其功能
\n 换行符
\ 一个
" 一个"
’ 一个’
\r 回车
注释comment
# 单行注释
'''多行注释'''
"""多行注释"""
# coding:编码 #文件编码声明注释,文件开头指定文件编码格式(简体中文操作系统默认编码ANSI是gbk)
python代码规范
tab缩进,shift+tab整体向左移动
=两边习惯各加一个空格
变量之间使用逗号和空格
Python基础
变量
变量是指向数据的,变量没有类型,类型是数据的
格式化输出
1)%操作符:http://blog.csdn.net/hesongzefairy/article/details/104179419
2)format()函数:https://www.runoob.com/python/att-string-format.html
3)f-strings【推荐】:https://blog.csdn.net/weixin_44200553
name = "张三”
age = 18
gender = '男'
source = 77.5
print("个人信息:", name, age, gender, source)
print("个人信息:%s-%d-%s-%.2f" %(name, age, gender, source)) # 占位符分别代表字符串、整数、字符串、2位小数
print("个人信息:{} {} {}".format(name, age, gender)) # 按序填充占位符,变量数大于等于占位符数
print(f"个人信息:{name} {age} {gender} {source}")
加号+
加号两边都是数值,执行运算
加号两边都是字符串,执行拼接
数据类型
内置函数
type(object)
查看数据类型,object可以是变量或数据,如果是变量,查看的是该变量指向的数据类型。
整型 int
Python的整数有10进制,16进制(0x前缀 09 AF),8进制(0o 07),2进制(0b 01),运行时会自动转换成十进制输出
Python中整型占多少字节?
字节数随着数字增大而增大,python整型是变长的(java中int固定4字节),最小28个字节,每次增量4个字节。
可通过
sys.getsizeof((object))
返回对象的字节大小
字节(byte):计算机中基本存储单位
位(bit):计算机中最小存储单位 1byte = 8bit
浮点数 float
十进制:5.12, .512
科学计数法:5.12e2 (5.12*10^2), 5.12E -2 (5.12/(10^2))
浮点数有最大值最小值限制;
浮点数型计算后,存在精度的损失,可以使用Decimal类进行精确计算
from decimal import Decimal
a = 8 / 2.7
b = Decimal("8.1") / Decimal("2.7")
print(a, b)
布尔值 bool
取值True和False,通常用于逻辑运算,一般用于程序流程控制(条件控制语句,循环控制语句)
布尔类型可以和其他数据类型进行比较,比如数字、字符串,比较时python将True视为1,将False视为0
非0被视为真知,0被视为假值
字符串 str
单引号和双引号可以用于嵌套,而不适用转义字符表示引号;
python不支持单字符类型,同样被视为字符串;
三引号(‘’‘或"“”)可使内容原样输出;
字符串前加 r 可使字符串不被转义;
字符串驻留机制:字符串池,节省空间提高效率
# 字符串驻留机制:Python仅保存一份相同的字符串
str1 = "Hello"
str2 = "Hello" # id()返回数据的标识值/内存地址
print(id(str1) == id(str2)) # True
# 驻留机制的几种情况
# 1) 字符串是由26个英文字母大小写,0-9,_组成(需在交互模式win+R -> python)
a = "abc#"
b = "abc#"
print(id(a) == id(b)) # False
# 2)字符串长度为0或1时,不受1)限制
# 3)字符串在编译时进行驻留,而非运行时(字符串在没有确定变量内容是什么前,可以发生驻留)
a = "abc"
b = "".join(["a", "bc"]) #运行后确定内容"abc"
print(id(a) == id(b)) # False
# 4) [-5, 256]的整数数字
# 强制2个字符串指向同一个对象
s1 = "abc#"
s2 = sys.intern(s1)
s1 is s2 # True
# pycharm对字符串进行了优化处理,不受驻留机制情况限制
数据类型转换
隐式类型转换/自动转换:
变量根据使用的上下文(即当前值)在运行时决定其类型
运算时数据类型会向高精度转换
var1 = 10
print(type(var1)) # int
显示类型转换/强制转换:
将数据类型作为函数名;
float转换成int时会直接去掉小数点部分;
str转成int时,要求字符串中本身是整数;str转成float,字符串中可以是整数;
强制转换后不会影响原变量和数据/值得类型。
i = 10
j = float(i) # 10.0
print(type(i)) # int
print(type(j) # float
i = j + 1 # 11.0
print(type(i)) # float
print(type(j)) # float
print(i) # 11.0
print(int(i)) # 11
print(type(i)) # float
符号 & 关键字
运算符
运算符:表示数据的运算、赋值和比较等
算数运算符:+ - * /
%
除法取模(取余),7%5 = 2//
除法取商的整数部分(向下取整) 9//2 = 4**
返回x的y次幂 2**4 = 16比较运算符
== != < > <= >=
is
/is not
判断两个变量引用对象是否为同一个/不同逻辑/布尔运算符
and or(布尔或是短路运算符,按序false才会判断下一个条件) not
赋值运算符:=
+=
/-=
/*=
//=
/%=
/**=
///=
复合加减乘除/取模/幂/取整除赋值运算符 c += a 等效于 c = c + a三元运算符
用if else实现 ? : 功能
max = a if a > b else b
位运算符 [二进制]
运算符优先级
标识符
Python对各种变量、函数和类等 命名 时使用的字符序列
命名规则:
由26个英文字母大小写,0-9,_组成
数字不可以开头
不能使用关键字,但可以包含关键字
Python区分大小写
标识符不能包含空格
类名:大驼峰命名,首字母大写
关键字
关键字/保留字:python语言赋予特殊含义,用作专门用途,不能用于普通标识符
cmd -> python -> help() -> keywords
键盘输入语句
- 内置函数
input(prompt)
- 如果存在“提示”实参,则将其写入标准输出,末尾不带换行符。接下来,阻塞等待输入,键盘输入语句,函数从中读取一行,将其转换为字符串(除末尾的换行符)并返回。当读取到EOF时,则触发EOFError。
name = input("请输入姓名:")
age = input("请输入年龄:") # 可以在接收时将str转成int int(input("..."))
score = input("请输入成绩:")
print("\n输入信息如下:")
print("name: ", name)
print("age: ", age)
print("score: ", score)
程序控制结构
顺序控制
从上到下按序执行,没有跳转或循环
分支控制
# 单分支
if 条件表达式:
代码块 # 相同缩进界定统一代码块,不同缩进代表代码块内外或嵌套,相当于其他编程语言中的{}
# 双分支
if 条件表达式:
代码块1
else:
代码块2
# 多分支
if 条件表达式1:
代码块1
elif 条件表达式2:
代码块2
...
else:
代码块n+1
# 嵌套分支:内外层分支,建议不超过3层,影响可读性
if:
if:
循环控制
如果需要遍历数字序列,可以使用内置
range()
函数,它会生成前闭后开的数列。
# for循环
for <变量> in <范围/序列>: # 数据集,可迭代对象,如字符串、列表等
<循环操作语句>
# for循环可以和else配合使用
for <variable> in <sequence>:
<statements>
else: # for循环正常完成遍历,遍历过程中没有被打断,如执行break语句
<statements>
# while循环
while condition:
statements
else: # while...else语句判断false且没有被打断即可执行else语句
additional_statements
# 多重循环
break语句
break
在
for
while
循环中,当满足某个条件时,使用break语句,可提前终止循环
break终结最近的外层循环,如果循环有可选的else语句也会跳过else语句
相关函数:
random.randint(a, b)
randrange(a, b+1)
返回[a, b]间随机整数
continue语句
用于for和while循环嵌套的代码中,用于结束本次循环,继续执行循环地下一次伦茨,作用于最近的外层循环
return语句
使用在函数,表示跳出所在的函数
函数
函数:为完成某一功能的程序指令(语句)的集合。
python中函数分为:系统函数(含内置函数、模块提供的函数)、自定义函数。
优点:提高代码的复用性;可将实现的细节封装起来,其他用户调用即可使用
· 函数命名规则(参考标识符命名规则)
· 函数中的变量是局部的,函数外不生效
· 通过位置传参,实参个数须和形参的个数、顺序一致
· 函数支持默认参数/缺省参数,需放在参数列表后(如4个参数,允许第1234、第234、第34、第4、0个默认参数,因为调用时按序传实参)
· 函数支持可变参数/不定长参数:传入的多个实参,会被组成一个元组tuple(可以存储多个数据项)
def f(param1, param2=default_value):
函数体
# pass
return 语句 #没有返回值相当于 return None
pass
不做任何事情,一般用作占位语句
None
内置常量,通常代表空值对象,有存放空间
id()
值
调用函数:
f(实参列表)
· 函数支持可变参数不定长参数
def sum(*args): # *代表0到多个参数
print(f"args->{args} 类型是->{type(args)}") # <class 'tuple'>元组
total = 0
for ele in args:
total += ele
return total
· 函数的可变参数/不定长参数,还支持多个关键字参数,也就是多个“形参名=实参值”。需求:传入不确定多少个参数,使用关键字参数方式传入
def person_info(**args):
print(f"args->{args} 类型是->{type(args)}") # <class 'dict'>字典
for arg_name in args:
print(f"参数名->{arg_name} 参数值->{args[arg_name]}")
函数传参机制
字符串和数值类型是不可变数据类型,当变量的值发生变化时,它对应的内存地址会发生改变。
a = 1
b = a
b = 10
print(a) # a=1 整数/字符串-不可变序列
list、tuple、set、dict传参机制
函数-递归调用
自己调用自己,应用于各种数学问题、算法、栈解决的问题用递归代码比较简洁。
· 执行一个函数,就创建一个新的空间(栈空间)
· 函数的变量是独立的,比如n变量(每个空间里的n有自己的指向)
· 递归必须向退出的条件逼近,否则就是无限递归,死龟了
函数作为参数传递
相同代码产生冗余,函数作为参数传递,传递的不是数据,而是业务处理逻辑。
lambda匿名函数
需求:将函数作为参数进行传递,但是这个函数只使用一次,这时可以考虑使用lambda匿名函数。
匿名函数无名称,用于临时创建一个函数,只使用一次的场景,不需要return,运算结果就是返回值,类型是
<class 'function'>
。
lambda num1[, num2...]: statement #函数体仅有一行代码
def f1(fun, num1, num2):
return fun(num1. num2)
f1(lambda a, b: a if a > b else b, 12, 10) #返回max_value
全局变量和局部变量
全局变量:在整个程序范围内都可以访问,定义在函数外,拥有全局作用域的变量。
局部变量:只能在其被声明的函数范围内访问,定义在函数内部,拥有局部作用域的变量。
· 如果在函数内重新定义了全局变量,函数内根据就近原则使用的是重新定义后的局部变量,函数外全局变量不受影响。
· 在函数内部使用
global
关键字,可以标明指定使用全局变量
n1 = 100
def f1():
global n1
n1 = 200
print(n1) #n1=200
f1()
print(n1) #n1=200