Python学习一Python基础语法

Posted 编程小栈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习一Python基础语法相关的知识,希望对你有一定的参考价值。

文章目录

一、认识Python

1、Python起源

人生苦短,我用 Python (Life is short, you need Python)

Python创始人吉多·范罗苏姆(Guido van Rossum)

  1. 1989 年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的解释程序,作为 ABC 语言的一种继承(感觉下什么叫牛人
  2. ABC 是由吉多参加设计的一种教学语言,就吉多本人看来,ABC 这种语言非常优美和强大,是专门为非专业程序员设计的。但是 ABC 语言并没有成功,究其原因,吉多认为是非开放造成的。吉多决心在 Python 中避免这一错误,并获取了非常好的效果
  3. 之所以选中 Python(蟒蛇) 作为程序的名字,是因为他是 BBC 电视剧——蒙提·派森的飞行马戏团(Monty Python’s Flying Circus)的爱好者
  4. 1991 年,第一个 Python 解释器 诞生,它是用 C 语言实现的,并能够调用 C 语言的库文件

解释器计算机不能直接理解任何除机器语言以外的语言,所以必须要把程序员所写的程序语言翻译成机器语言,计算机才能执行程序。将其他语言翻译成机器语言的工具,被称为编译器

编译器翻译的两种方式:一个是编译,另外一个是解释。两种方式之间的区别在于翻译时间点的不同。当编译器以解释方式运行的时候,也称之为解释器

编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如 C、C++

解释型语言:解释型语言编写的程序不进行预先编译,以文本方式存储程序代码,会将代码一句一句直接运行。在发布程序时,看起来省了道编译工序,但是在运行程序的时候,必须先解释再运行

对比

执行速度 —— 编译型语言 > 解释型语言

跨平台性 —— 解释型语言 > 编译型语言

Python 的设计哲学:优雅、明确、简单、

同一样问题,用不同的语言解决,代码量差距还是很多的,一般情况下 PythonJava1/5

2、语言特点

  • Python 是完全面向对象的语言
    • 函数模块数字字符串都是对象,在 Python 中一切皆对象
    • 完全支持继承、重载、多重继承
    • 支持重载运算符,也支持泛型设计
  • Python 拥有一个强大的标准库,核心包含 数字字符串列表字典文件 等常见类型和函数,而由 Python 标准库提供了 系统管理网络通信文本处理数据库接口图形系统XML 处理 等额外的功能
  • Python 社区提供了大量的第三方模块,使用方式与标准库类似。它们的功能覆盖 科学计算人工智能机器学习Web 开发数据库接口图形系统 多个领域

面向对象的思维方式:

  • 面向对象 是一种 思维方式,也是一门 程序设计技术
  • 要解决一个问题前,首先考虑 由谁 来做,怎么做事情是 (对象 )的职责,最后把事情做好。
  • 要解决复杂的问题,就可以找多个不同的对象各司其职,共同实现,最终完成需求

3、优缺点

优点:面向对象、丰富的库、可扩展性 , 缺点:运行速度。

可扩展性:如果需要一段关键代码运行得更快或者希望某些算法不公开,可以把这部分程序用 CC++ 编写,然后在 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.6Python 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. 硬盘 
   * 永久 存储数据
   * 速度慢
   * 空间大(单位价格低)

程序的作用:程序就是 用来处理数据的。
 新闻软件提供的 **新闻内容、评论……** 是数据
 电商软件提供的 **商品信息、配送信息……** 是数据
 即时通讯软件提供的 **聊天信息、好友信息……** 是数据

程序执行的原理

  1. 程序 运行之前,程序是 保存在硬盘 中的
  2. 当要运行一个程序时
    • 操作系统会首先让 CPU 把程序复制到 内存
    • CPU 执行 内存 中的 程序代码

Python 程序执行原理

  1. 操作系统会首先让 CPUPython 解释器 的程序复制到 内存
  2. Python 解释器 根据语法规则,从上向下CPU 翻译 Python 程序中的代码
  3. 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 中的 标识符区分大小写的

  1. 在定义变量时,为了保证代码格式,= 的左右应该各保留一个空格

  2. Python 中,如果 变量名 需要由 二个多个单词 组成时,可以按照以下方式命名

    1. 每个单词都使用小写字母
    2. 单词与单词之间使用 _下划线 连接
    • 例如:first_namelast_nameqq_numberqq_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】不同类型变量之间的计算

  1. 数字型变量之间可以直接计算

    如果变量是 bool 型,在计算时:True 对应的数字是 1False 对应的数字是 0

  2. 字符串变量之间使用 + 拼接字符串

  3. 字符串变量 可以和 整数 使用 * 重复拼接相同的字符串

注意: 数字型变量字符串 之间 不能进行其他计算

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列表 中可以 存储不同类型的数据
  • 但是在开发中,更多的应用场景是
    1. 列表 存储相同类型的数据
    2. 通过 迭代遍历,在循环体内部,针对列表中的每一项元素,执行相同的操作
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. 指定的区间属于 左闭右开[开始索引, 结束索引) ,从 起始 位开始,到 结束位的前一位 结束(不包含结束位本身)
  2. 从头开始,开始索引 数字可以省略,冒号不能省略
  3. 到末尾结束,结束索引 数字可以省略,冒号不能省略
  4. 步长默认为 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)面试题-交换两个数字

题目要求

  1. 有两个整数变量 a = 6, b = 100
  2. 不使用其他变量交换两个变量的值

解法 1 —— 使用其他变量

# 解法 1 - 使用临时变量
c = b
b = a
a = c

解法 2 —— 不使用临时变量

# 解

以上是关于Python学习一Python基础语法的主要内容,如果未能解决你的问题,请参考以下文章

Python学习一Python基础语法

Python 语法基础_数据类型补充

python学习:基础语法

Python入门基础学习详解二

Python入门基础学习详解二

Python基础 | Python的基本语法