玩转Python之Python基础语法初体验
Posted ahcfl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了玩转Python之Python基础语法初体验相关的知识,希望对你有一定的参考价值。
文章目录
一、认识Python
1、Python起源
人生苦短,我用 Python (Life is short, you need Python)
Python创始人吉多·范罗苏姆(Guido van Rossum)
- 1989 年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的解释程序,作为 ABC 语言的一种继承(感觉下什么叫牛人)
- ABC 是由吉多参加设计的一种教学语言,就吉多本人看来,ABC 这种语言非常优美和强大,是专门为非专业程序员设计的。但是 ABC 语言并没有成功,究其原因,吉多认为是非开放造成的。吉多决心在 Python 中避免这一错误,并获取了非常好的效果
- 之所以选中 Python(蟒蛇) 作为程序的名字,是因为他是 BBC 电视剧——蒙提·派森的飞行马戏团(Monty Python’s Flying Circus)的爱好者
- 1991 年,第一个 Python 解释器 诞生,它是用 C 语言实现的,并能够调用 C 语言的库文件
解释器:计算机不能直接理解任何除机器语言以外的语言,所以必须要把程序员所写的程序语言翻译成机器语言,计算机才能执行程序。将其他语言翻译成机器语言的工具,被称为编译器
编译器翻译的两种方式:一个是编译,另外一个是解释。两种方式之间的区别在于翻译时间点的不同。当编译器以解释方式运行的时候,也称之为解释器
编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如 C、C++
解释型语言:解释型语言编写的程序不进行预先编译,以文本方式存储程序代码,会将代码一句一句直接运行。在发布程序时,看起来省了道编译工序,但是在运行程序的时候,必须先解释再运行
对比:
执行速度 —— 编译型语言 > 解释型语言
跨平台性 —— 解释型语言 > 编译型语言
Python 的设计哲学:优雅、明确、简单、
同一样问题,用不同的语言解决,代码量差距还是很多的,一般情况下 Python
是 Java
的 1/5。
2、语言特点
- Python 是完全面向对象的语言
- 函数、模块、数字、字符串都是对象,在 Python 中一切皆对象
- 完全支持继承、重载、多重继承
- 支持重载运算符,也支持泛型设计
- Python 拥有一个强大的标准库,核心包含 数字、字符串、列表、字典、文件 等常见类型和函数,而由 Python 标准库提供了 系统管理、网络通信、文本处理、数据库接口、图形系统、XML 处理 等额外的功能
- Python 社区提供了大量的第三方模块,使用方式与标准库类似。它们的功能覆盖 科学计算、人工智能、机器学习、Web 开发、数据库接口、图形系统 多个领域
面向对象的思维方式:
- 面向对象 是一种 思维方式,也是一门 程序设计技术
- 要解决一个问题前,首先考虑 由谁 来做,怎么做事情是 谁 (对象 )的职责,最后把事情做好。
- 要解决复杂的问题,就可以找多个不同的对象,各司其职,共同实现,最终完成需求
3、优缺点
优点:面向对象、丰富的库、可扩展性 , 缺点:运行速度。
可扩展性:如果需要一段关键代码运行得更快或者希望某些算法不公开,可以把这部分程序用 C
或 C++
编写,然后在 Python
程序中使用它们
4、HelloPython
linux环境下演示操作
【1】源程序
创建HelloPython.py文件,书写下面的内容,解释器运行之。
$ python HelloPython.py
print("hello python")
print("hello world")
Python 源程序就是一个特殊格式的文本文件,可以使用任意文本编辑软件做 Python
的开发。
Python 程序的 文件扩展名 通常都是 .py
。
【2】Python 2.x 与 3.x版本简介
- Python 2.x 是 过去的版本
- 解释器名称是 python
- 默认不支持中文
- Python 3.x 是 现在和未来 主流的版本
- 解释器名称是 python3
- 相对于
Python
的早期版本,这是一个 较大的升级 - 为了不带入过多的累赘,
Python 3.0
在设计的时候 没有考虑向下兼容- 许多早期
Python
版本设计的程序都无法在Python 3.0
上正常执行
- 许多早期
- Python 3.0 发布于 2008 年
- 到目前为止,Python 3.0 的稳定版本已经有很多年了
- Python 3.3 发布于 2012
- Python 3.4 发布于 2014
- Python 3.5 发布于 2015
- Python 3.6 发布于 2016
- 为了照顾现有的程序,官方提供了一个过渡版本 —— Python 2.6
- 基本使用了
Python 2.x
的语法和库 - 同时考虑了向
Python 3.0
的迁移,允许使用部分Python 3.0
的语法与函数 - 2010 年中推出的
Python 2.7
被确定为 最后一个Python 2.x 版本
- 基本使用了
如果开发时,无法立即使用 Python 3.0(还有极少的第三方库不支持 3.0 的语法)
建议:
- 先使用
Python 3.0
版本进行开发- 然后使用
Python 2.6
、Python 2.7
来执行,并且做一些兼容性的处理
【3】执行 Python 程序方式
1) 解释器
Python 的解释器 如今有多个语言的实现,包括:
CPython
—— 官方版本的 C 语言实现Jython
—— 可以运行在 Java 平台IronPython
—— 可以运行在 .NET 和 Mono 平台PyPy
—— Python 实现的,支持 JIT 即时编译
# 使用 python 2.x 解释器
$ python xxx.py
# 使用 python 3.x 解释器
$ python3 xxx.py
2) 交互式运行
在 Python 的 Shell
中直接输入 Python 的代码,会立即看到程序执行结果
代码不能保存,不适合运行太大的程序,退出直接输入 exit()
或ctrl + d
3) IPython
IPython 中 的 “I” 代表 交互 interactive
IPython 是一个 python 的 交互式 shell,比默认的 python shell
好用得多,基于 BSD 开源。
- Python 2.x 使用的解释器是 ipython
- Python 3.x 使用的解释器是 ipython3
【4】程序执行原理
计算机中的三大件:
1. CPU
* 中央处理器,是一块超大规模的集成电路
* 负责处理数据/计算
2. 内存
* 临时 存储数据(断电之后,数据会消失)
* 速度快
* 空间小(单位价格高)
3. 硬盘
* 永久 存储数据
* 速度慢
* 空间大(单位价格低)
程序的作用:程序就是 用来处理数据的。
新闻软件提供的 **新闻内容、评论……** 是数据
电商软件提供的 **商品信息、配送信息……** 是数据
即时通讯软件提供的 **聊天信息、好友信息……** 是数据
程序执行的原理
- 程序 运行之前,程序是 保存在硬盘 中的
- 当要运行一个程序时
- 操作系统会首先让 CPU 把程序复制到 内存 中
- CPU 执行 内存 中的 程序代码
Python 程序执行原理
- 操作系统会首先让 CPU 把 Python 解释器 的程序复制到 内存 中
- Python 解释器 根据语法规则,从上向下 让 CPU 翻译 Python 程序中的代码
- CPU 负责执行翻译完成的代码
【5】PyCharm 开发工具
PyCharm 的官方网站地址是:https://www.jetbrains.com/pycharm/
专业版下载地址:https://www.jetbrains.com/pycharm/download/#section=linux
二、Python征程起点
任何语言的程序员,编写出符合规范的代码,是开始程序生涯的第一步
关于代码规范:
Python
官方提供有一系列 PEP(Python Enhancement Proposals) 文档,
其中第 8 篇文档专门针对 Python 的代码格式 给出了建议,也就是俗称的 PEP 8
PEP 8中文文档:http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/
1、注释
【1】单行注释(行注释)
#
后面建议先添加一个空格,保证代码的可读性
# 这是第一个单行注释
print("hello python")
保证代码的可读性**,**注释和代码之间 至少要有 两个空格
print("hello python") # 输出 `hello python`
【2】多行注释(块注释)
用 一对 连续的 三个 引号(单引号和双引号都可以)
"""
这是一个多行注释
在多行注释之间,可以写很多很多的内容……
"""
print("hello python")
【3】函数的文档注释
- 在开发中,如果希望给函数添加注释,应该在 定义函数 的下方,使用 连续的三对引号
- 在 连续的三对引号 之间编写对函数的说明文字
- 在 函数调用 位置,使用快捷键
Ctrl + Q
可以查看函数的说明信息
【4】什么时候使用注释
(注释不是越多越好)
一目了然的代码,不需要添加注释
非一目了然的代码,应在其行尾添加注释
复杂的操作,应该在操作开始前写上若干行注释
2、变量
程序是用来处理数据的,而变量是用来存储数据的
【1】变量的命名
1)标示符
程序员定义的 变量名、函数名,名字 需要有 见名知义 的效果。
- 标示符可以由 字母、下划线 和 数字 组成
- 不能以数字开头,(字母、下划线可以开头)
- 不能与关键字重名
2)关键字
- 关键字 就是在
Python
内部已经使用的标识符 - 关键字 具有特殊的功能和含义
- 开发者 不允许定义和关键字相同的名字的标示符
In [1]: import keyword
In [2]: print(keyword.kwlist)
In [3]: print(len(keyword.kwlist))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kBE1vedK-1625660757637)(Python基础语法.assets/image-20210707140408737.png)]
3)变量的命名规则
Python
中的 标识符 是 区分大小写的
-
在定义变量时,为了保证代码格式,
=
的左右应该各保留一个空格 -
在
Python
中,如果 变量名 需要由 二个 或 多个单词 组成时,可以按照以下方式命名- 每个单词都使用小写字母
- 单词与单词之间使用
_
下划线 连接
- 例如:
first_name
、last_name
、qq_number
、qq_password
【2】变量定义
变量名 = 值
在 Python 中,每个变量 在使用前都必须赋值,变量 赋值以后 该变量 才会被创建
# 定义 qq 号码变量
qq_number = "1234567"
# 定义 qq 密码变量
qq_password = "123"
# 在程序中,如果要输出变量的内容,需要使用 print 函数
print(qq_number)
print(qq_password)
=====================================================
# 定义苹果价格变量
price = 8.5
# 定义购买重量
weight = 7.5
# 计算金额
money = price * weight
print(money)
【3】变量的类型
- 在
Python
中定义变量是 不需要指定类型(在其他很多高级语言中都需要) - 数据类型可以分为 数字型 和 非数字型
- 数字型 4
- 整型 (
int
) - 浮点型(
float
) - 布尔型(
bool
)- 真
True
非 0 数
—— 非零即真 - 假
False
0
- 真
- 复数型 (
complex
)- 主要用于科学计算,例如:平面场问题、波动问题、电感电容等问题
- 整型 (
- **非数字型 ** 4
- 字符串
- 列表
- 元组
- 字典
提示:在 Python 2.x 中,整数 根据保存数值的长度还分为:
int
(整数)long
(长整数)
- 使用
type
函数可以查看一个变量的类型 type(name)
【4】不同类型变量之间的计算
-
数字型变量之间可以直接计算
如果变量是
bool
型,在计算时:True
对应的数字是1
,False
对应的数字是0
-
字符串变量之间使用
+
拼接字符串 -
字符串变量 可以和 整数 使用
*
重复拼接相同的字符串
注意: 数字型变量 和 字符串 之间 不能进行其他计算
first_name = "zhang"
x = 10
x + first_name
-------------------------------
TypeError: unsupported operand type(s) for +: 'int' and 'str'
【5】变量常用函数
函数 | 说明 |
---|---|
print(x) | 将 x 输出到控制台 |
type(x) | 查看 x 的变量类型 |
字符串变量 =input(“提示信息:”) | 键盘输入 |
int(x) | 将 x 转换为一个整数 |
float(x) | 将 x 转换到一个浮点数 |
演示1
# 1. 输入苹果单价
price_str = input("请输入苹果价格:")
# 2. 要求苹果重量
weight_str = input("请输入苹果重量:")
# 3. 计算金额
# 1> 将苹果单价转换成小数(浮点数)
price = float(price_str)
# 2> 将苹果重量转换成小数
weight = float(weight_str)
# 3> 计算付款金额
money = price * weight
# 输出打印金额
print(money)
演示2(函数能够嵌套使用)
定义 一个 浮点变量 接收用户输入的同时使用 float
函数进行转换
price = float(input("请输入价格:"))
weight = float(input("请输入苹果重量:"))
money = price * weight
print(money)
【6】变量的格式化输出
如果希望输出文字信息的同时,一起输出 数据,就需要使用到 格式化操作符
%
被称为 格式化操作符,专门用于处理字符串中的格式
- 包含
%
的字符串,被称为 格式化字符串 %
和不同的 字符 连用,不同类型的数据 需要使用 不同的格式化字符
格式化字符 | 含义 |
---|---|
%s | 字符串 |
%d | 有符号十进制整数,%06d 表示输出的整数显示位数,不足的地方使用 0 补全 |
%f | 浮点数,%.2f 表示小数点后只显示两位 |
%% | 输出 % |
print("苹果单价 %.02f 元/斤,购买 %.02f 斤,需要支付 %.02f 元" % (price, weight, money))
print("数据比例是 %.02f%%" % (scale * 100))
name = input("请输入姓名:")
company = input("请输入公司:")
title = input("请输入职位:")
phone = input("请输入电话:")
email = input("请输入邮箱:")
print("*" * 50)
print(company)
print()
print("%s (%s)" % (name, title))
print()
print("电话:%s" % phone)
print("邮箱:%s" % email)
print("*" * 50)
【7】高级变量类型
1)列表
List
(列表) 是Python
中使用 最频繁 的数据类型,在其他语言中通常叫做 数组- 专门用于存储 一串 信息
- 列表用
[]
定义,数据 之间使用,
分隔 - 列表的 索引 从
0
开始- 索引 就是数据在 列表 中的位置编号,索引 又可以被称为 下标
注意:从列表中取值时,如果 超出索引范围,程序会报错
列表常用操作
在 ipython3
中定义一个 列表,例如:name_list = []
输入 name_list.
按下 TAB
键,ipython
会提示 列表 能够使用的 方法 如下
name_list = ["zhangsan", "lisi", "wangwu"]
name_list.append name_list.count name_list.insert name_list.reverse
name_list.clear name_list.extend name_list.pop name_list.sort
name_list.copy name_list.index name_list.remove
应用场景
- 尽管
Python
的 列表 中可以 存储不同类型的数据 - 但是在开发中,更多的应用场景是
- 列表 存储相同类型的数据
- 通过 迭代遍历,在循环体内部,针对列表中的每一项元素,执行相同的操作
2)元组
Tuple
(元组)与列表类似,不同之处在于元组的 元素不能修改- 元组 表示多个元素组成的序列
- 元组 在
Python
开发中,有特定的应用场景
- 用于存储 一串 信息,数据 之间使用
,
分隔 - 元组用
()
定义 - 元组的 索引 从
0
开始- 索引 就是数据在 元组 中的位置编号
# 创建空元组
info_tuple = ()
# 元组中 只包含一个元素时,需要 **在元素后面添加逗号**
info_tuple = (50, )
# 元组中 包含多个元素时
info_tuple = ("zhangsan", 18, 1.75)
元组操作
- 在
ipython3
中定义一个 元组,例如:info = ()
- 输入
info.
按下TAB
键,ipython
会提示 元组 能够使用的函数如下:
info.count info.index
应用场景
- 尽管可以使用
for in
遍历 元组 - 但是在开发中,更多的应用场景是:
- 函数的 参数 和 返回值,一个函数可以接收 任意多个参数,或者 一次返回多个数据
- 有关 函数的参数 和 返回值,在后续 函数高级 给大家介绍
- 格式字符串,格式化字符串后面的
()
本质上就是一个元组 - 让列表不可以被修改,以保护数据安全
- 函数的 参数 和 返回值,一个函数可以接收 任意多个参数,或者 一次返回多个数据
info = ("zhangsan", 18)
print("%s 的年龄是 %d" % info)
3)字典
dictionary
(字典) 是 除列表以外Python
之中 最灵活 的数据类型- 字典同样可以用来 存储多个数据
- 通常用于存储 描述一个
物体
的相关信息
- 通常用于存储 描述一个
- 和列表的区别
- 列表 是 有序 的对象集合
- 字典 是 无序 的对象集合
- 字典用
{}
定义 - 字典使用 键值对 存储数据,键值对之间使用
,
分隔- 键
key
是索引 - 值
value
是数据 - 键 和 值 之间使用
:
分隔 - 键必须是唯一的
- 值 可以取任何数据类型,但 键 只能使用 字符串、数字或 元组
- 键
student = {"name": "小明",
"age": 18,
"gender": True,
"height": 1.75}
字典常用操作
- 在
ipython3
中定义一个 字典,例如:student= {}
- 输入
student.
按下TAB
键,ipython
会提示 字典 能够使用的函数如下:
# for 循环内部使用的 `key 的变量` in 字典
for k in student:
print("%s: %s" % (k, student[k])
应用场景
- 尽管可以使用
for in
遍历 字典 - 但是在开发中,更多的应用场景是:
- 使用 多个键值对,存储 描述一个
物体
的相关信息 —— 描述更复杂的数据信息 - 将 多个字典 放在 一个列表 中,再进行遍历,在循环体内部针对每一个字典进行 相同的处理
- 使用 多个键值对,存储 描述一个
card_list = [{"name": "张三",
"qq": "12345",
"phone": "110"},
{"name": "李四",
"qq": "54321",
"phone": "10086"}
]
4)字符串
- 字符串 就是 一串字符,是编程语言中表示文本的数据类型
- 在 Python 中可以使用 一对双引号
"
或者 一对单引号'
定义一个字符串- 虽然可以使用
\\"
或者\\'
做字符串的转义,但是在实际开发中:- 如果字符串内部需要使用
"
,可以使用'
定义字符串 - 如果字符串内部需要使用
'
,可以使用"
定义字符串
- 如果字符串内部需要使用
- 虽然可以使用
- 可以使用 索引 获取一个字符串中 指定位置的字符,索引计数从 0 开始
- 也可以使用
for
循环遍历 字符串中每一个字符
大多数编程语言都是用
"
来定义字符串
string = "Hello Python"
for c in string:
print(c)
字符串的常用操作
- 在
ipython3
中定义一个 字符串,例如:hello_str = ""
- 输入
hello_str.
按下TAB
键,ipython
会提示 字符串 能够使用的 方法 如下:
提示:正是因为 python 内置提供的方法足够多,才使得在开发时,能够针对字符串进行更加灵活的操作!应对更多的开发需求!
1) 判断类型 - 9
方法 | 说明 |
---|---|
string.isspace() | 如果 string 中只包含空格,则返回 True |
string.isalnum() | 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True |
string.isalpha() | 如果 string 至少有一个字符并且所有字符都是字母则返回 True |
string.isdecimal() | 如果 string 只包含数字则返回 True,全角数字 |
string.isdigit() | 如果 string 只包含数字则返回 True,全角数字 、⑴ 、\\u00b2 |
string.isnumeric() | 如果 string 只包含数字则返回 True,全角数字 ,汉字数字 |
string.istitle() | 如果 string 是标题化的(每个单词的首字母大写)则返回 True |
string.islower() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True |
string.isupper() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True |
2) 查找和替换 - 7
方法 | 说明 |
---|---|
string.startswith(str) | 检查字符串是否是以 str 开头,是则返回 True |
string.endswith(str) | 检查字符串是否是以 str 结束,是则返回 True |
string.find(str, start=0, end=len(string)) | 检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1 |
string.rfind(str, start=0, end=len(string)) | 类似于 find(),不过是从右边开始查找 |
string.index(str, start=0, end=len(string)) | 跟 find() 方法类似,不过如果 str 不在 string 会报错 |
string.rindex(str, start=0, end=len(string)) | 类似于 index(),不过是从右边开始 |
string.replace(old_str, new_str, num=string.count(old)) | 把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次 |
3) 大小写转换 - 5
方法 | 说明 |
---|---|
string.capitalize() | 把字符串的第一个字符大写 |
string.title() | 把字符串的每个单词首字母大写 |
string.lower() | 转换 string 中所有大写字符为小写 |
string.upper() | 转换 string 中的小写字母为大写 |
string.swapcase() | 翻转 string 中的大小写 |
4) 文本对齐 - 3
方法 | 说明 |
---|---|
string.ljust(width) | 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串 |
string.rjust(width) | 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串 |
string.center(width) | 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 |
5) 去除空白字符 - 3
方法 | 说明 |
---|---|
string.lstrip() | 截掉 string 左边(开始)的空白字符 |
string.rstrip() | 截掉 string 右边(末尾)的空白字符 |
string.strip() | 截掉 string 左右两边的空白字符 |
6) 拆分和连接 - 5
方法 | 说明 |
---|---|
string.partition(str) | 把字符串 string 分成一个 3 元素的元组 (str前面, str, str后面) |
string.rpartition(str) | 类似于 partition() 方法,不过是从右边开始查找 |
string.split(str="", num) | 以 str 为分隔符拆分 string,如果 num 有指定值,则仅分隔 num + 1 个子字符串,str 默认包含 ‘\\r’, ‘\\t’, ‘\\n’ 和空格 |
string.splitlines() | 按照行(’\\r’, ‘\\n’, ‘\\r\\n’)分隔,返回一个包含各行作为元素的列表 |
string.join(seq) | 以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 |
5)切片操作
切片 方法适用于 字符串、列表、元组
- 切片 使用 索引值 来限定范围,从一个大的 字符串 中 切出 小的 字符串
- 列表 和 元组 都是 有序 的集合,都能够 通过索引值 获取到对应的数据
- 字典 是一个 无序 的集合,是使用 键值对 保存数据
字符串[开始索引:结束索引:步长] `开始索引 >= 范围 < 结束索引`
- 指定的区间属于 左闭右开 型
[开始索引, 结束索引)
,从起始
位开始,到结束
位的前一位 结束(不包含结束位本身) - 从头开始,开始索引 数字可以省略,冒号不能省略
- 到末尾结束,结束索引 数字可以省略,冒号不能省略
- 步长默认为
1
,如果连续切片,数字和冒号都可以省略
索引的顺序和倒序
- 在 Python 中不仅支持 顺序索引,同时还支持 倒序索引
- 所谓倒序索引就是 从右向左 计算索引,最右边的索引值是 -1,依次递减
num_str = "0123456789"
# 1. 截取从 2 ~ 5 位置 的字符串
print(num_str[2:6])
# 2. 截取从 2 ~ `末尾` 的字符串
print(num_str[2:])
# 3. 截取从 `开始` ~ 5 位置 的字符串
print(num_str[:6])
# 4. 截取完整的字符串
print(num_str[:])
# 5. 从开始位置,每隔一个字符截取字符串
print(num_str[::2]
# 6. 从索引 1 开始,每隔一个取一个
print(num_str[1::2])
=====================================
# 倒序切片
# -1 表示倒数第一个字符
print(num_str[-1])
# 7. 截取从 2 ~ `末尾 - 1` 的字符串
print(num_str[2:-1])
# 8. 截取字符串末尾两个字符
print(num_str[-2:])
# 9. 字符串的逆序(面试题)
print(num_str[::-1])
6)元组与列表的转换
- 使用
list
函数可以把元组转换成列表
list(元组)
- 使用
tuple
函数可以把列表转换成元组
tuple(列表)
7)面试题-交换两个数字
题目要求
- 有两个整数变量
a = 6
,b = 100
- 不使用其他变量,交换两个变量的值
解法 1 —— 使用其他变量
# 解法 1 - 使用临时变量
c = b
b = a
a = c
以上是关于玩转Python之Python基础语法初体验的主要内容,如果未能解决你的问题,请参考以下文章