Python教程基础篇,超详细超长!

2023-11-18

安装Python

前往 官网下载 对应平台对应工具。另外Python2.7版本和3.3版本并不兼容,所以开发时请注意使用Python的版本。

作为Mac OS X使用者,其实更推荐 PyCharm IDE 。安装之后直接使用即可。

数据类型

计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在Python中,能够直接处理的数据类型有以下几种:

整数

Python可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。

计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。

浮点数

浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23×10^9 和 12.3×10^8 是相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23×10^9 就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。

整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。

字符串

字符串是以’’或””括起来的任意文本,比如’abc’,”xyz”等等。请注意,’’或””本身只是一种表示方式,不是字符串的一部分,因此,字符串’abc’只有a,b,c这3个字符。

布尔值

布尔值和布尔代数的表示完全一致,一个布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来。

布尔值可以用and、or和not运算。

and运算是与运算,只有所有都为 True,and运算结果才是 True。

or运算是或运算,只要其中有一个为 True,or 运算结果就是 True。

not运算是非运算,它是一个单目运算符,把 True 变成 False,False 变成 True。

空值

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

此外,Python还提供了列表、字典等多种数据类型,还允许创建自定义数据类型。

print 语句

print语句可以向屏幕上输出指定的文字。比如输出’hello, world’,用代码实现如下:

 

>>> print 'hello, world'

注意:

1.当我们在Python交互式环境下编写代码时,>>>是Python解释器的提示符,不是代码的一部分。

2.当我们在文本编辑器中编写代码时,千万不要自己添加 >>>。

print语句也可以跟上多个字符串,用逗号“,”隔开,就可以连成一串输出:

 

>>> print 'The quick brown fox', 'jumps over', 'the lazy dog'The quick brown fox jumps over the lazy dog

print会依次打印每个字符串,遇到逗号“,”会输出一个空格,因此,输出的字符串是这样拼起来的:

print也可以打印整数,或者计算结果:

 
>>> print 300300    #运行结果>>> print 100 + 200300    #运行结果

因此,我们可以把计算100 + 200的结果打印得更漂亮一点:


>>> print '100 + 200 =', 100 + 200100 + 200 = 300     #运行结果

注意: 对于100 + 200,Python解释器自动计算出结果300,但是,’100 + 200 =’是字符串而非数学公式,Python把它视为字符串,请自行解释上述打印结果。

Python的注释

任何时候,我们都可以给程序加上注释。注释是用来说明代码的,给自己或别人看,而程序运行的时候,Python解释器会直接忽略掉注释,所以,有没有注释不影响程序的执行结果,但是影响到别人能不能看懂你的代码。

Python的注释以 # 开头,后面的文字直到行尾都算注释

 

# 这一行全部都是注释...print 'hello' # 这也是注释

注释还有一个巧妙的用途,就是一些代码我们不想运行,但又不想删除,就可以用注释暂时屏蔽掉:

 

# 暂时不想运行下面一行代码: # print 'hello, python.'

变量

在Python中,变量的概念基本上和初中代数的方程变量是一致的。

例如,对于方程式 y=x*x ,x就是变量。当 x=2 时,计算结果是4,当 x=5 时,计算结果是25。

只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。

在Python程序中,变量是用一个变量名表示,变量名必须是 大小写英文、数字和下划线(_)的组合,且不能用数字开头 ,比如:

 

a = 1

变量 a 是一个整数。

 

t_007 = 'T007'

变量 t_007 是一个字符串。

在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,例如:

 

a = 123    # a是整数print a a = 'Chars'   # a变为字符串print a

这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。

静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如Java是静态语言,赋值语句如下(// 表示注释):

 

int a = 123; // a是整数类型变量a = "Chars"; // 错误:不能把字符串赋给整型变量

和静态语言相比,动态语言更灵活,就是这个原因。

请不要把赋值语句的等号等同于数学的等号。比如下面的代码:

 
x = 10x = x + 2

如果从数学上理解 x = x + 2 那无论如何是不成立的,在程序中,赋值语句先计算右侧的表达式 x + 2 ,得到结果12,再赋给变量x。由于x之前的值是10,重新赋值后,x的值变成12。

最后,理解变量在计算机内存中的表示也非常重要。当我们写: a = 'ABC' 时,Python解释器干了两件事情:

  1. 在内存中创建了一个’ABC’的字符串;

  2. 在内存中创建了一个名为a的变量,并把它指向’ABC’。

也可以把一个变量a赋值给另一个变量b,这个操作实际上是把变量b指向变量a所指向的数据,例如下面的代码:

 
a = 'ABC'b = a a = 'XYZ'print b

最后一行打印出变量b的内容到底是 'ABC' 呢还是 'XYZ' ?如果从数学意义上理解,就会错误地得出b和a相同,也应该是 'XYZ' ,但实际上b的值是 'ABC' ,让我们一行一行地执行代码,就可以看到到底发生了什么事:

执行 a = 'ABC' ,解释器创建了字符串 'ABC' 和变量 a ,并把a指向 'ABC' :

执行 b = a ,解释器创建了变量 b,并把b指向 a 指向的字符串 'ABC' :

执行 a = 'XYZ' ,解释器创建了字符串 'XYZ' ,并把a的指向改为 'XYZ' ,但b并没有更改:

所以,最后打印变量b的结果自然是 'ABC' 了。

字符串

定义字符串

前面我们讲解了什么是字符串。字符串可以用 '' 或者 "" 括起来表示。

如果字符串本身包含’怎么办?比如我们要表示字符串 I'm OK ,这时,可以用 " " 括起来表示:

 

"I'm OK"

类似的,如果字符串包含”,我们就可以用’ ‘括起来表示:

 
'Learn "Python" in Chars's Blog'

如果字符串既包含’又包含”怎么办?

这个时候,就需要对字符串的某些特殊字符进行“转义”,Python字符串用 \ 进行转义。

要表示字符串 Bob said "I'm OK" .

由于 ‘ 和 “ 会引起歧义,因此,我们在它前面插入一个 \ 表示这是一个普通字符,不代表字符串的起始,因此,这个字符串又可以表示为

 
'Bob said \"I\'m OK\".'

注意:转义字符 \ 不计入字符串的内容中。

常用的转义字符还有:

 

\n 表示换行\t 表示一个制表符\\ 表示 \ 字符本身

raw字符串与多行字符串

如果一个字符串包含很多需要转义的字符,对每一个字符都进行转义会很麻烦。为了避免这种情况,我们可以在字符串前面加个前缀 r ,表示这是一个 raw 字符串,里面的字符就不需要转义了。例如:

 

r'\(~_~)/ \(~_~)/'

但是 r'...' 表示法不能表示多行字符串,也不能表示包含 ' 和 " 的字符串(为什么?)

如果要表示多行字符串,可以用 '''...''' 表示:

 
'''Line 1 Line 2 Line 3'''

上面这个字符串的表示方法和下面的是完全一样的:

 
'Line 1\nLine 2\nLine 3'

还可以在多行字符串前面添加 r ,把这个多行字符串也变成一个raw字符串:

 
r'''Python is created by "Guido". It is free and easy to learn. Let's start learn Python in Chars's Blog!'''

Unicode字符串

字符串还有一个编码问题。

因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),0 – 255被用来表示大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母 A 的编码是65,小写字母 z 的编码是122。

如果要表示中文,显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。

类似的,日文和韩文等其他语言也有这个问题。为了统一所有文字的编码,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。

Unicode通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以。

因为Python的诞生比Unicode标准发布的时间还要早,所以最早的Python只支持ASCII编码,普通的字符串’ABC’在Python内部都是ASCII编码的。

Python在后来添加了对Unicode的支持,以Unicode表示的字符串用u’…’表示,比如:

 

print u'中文'中文

注意: 不加 u ,中文就不能正常显示。

Unicode字符串除了多了一个 u 之外,与普通字符串没啥区别,转义字符和多行表示法仍然有效:

转义:

 

u'中文\n日文\n韩文'

多行:

 

u'''第一行 第二行'''

raw+多行:

 

ur'''Python的Unicode字符串支持"中文", "日文", "韩文"等多种语言'''

如果中文字符串在Python环境下遇到 UnicodeDecodeError ,这是因为.py文件保存的格式有问题。可以在第一行添加注释

 

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

目的是告诉Python解释器,用UTF-8编码读取源代码。然后用Notepad++ 另存为… 并选择UTF-8格式保存。

List

创建list

Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。

比如,列出班里所有同学的名字,就可以用一个list表示:

 
>>> ['Michael', 'Bob', 'Tracy'] ['Michael', 'Bob', 'Tracy']

list是数学意义上的有序集合,也就是说,list中的元素是按照顺序排列的。

构造list非常简单,按照上面的代码,直接用 [ ] 把list的所有元素都括起来,就是一个list对象。通常,我们会把list赋值给一个变量,这样,就可以通过变量来引用list:

 
>>> classmates = ['Michael', 'Bob', 'Tracy']>>> classmates # 打印classmates变量的内容['Michael', 'Bob', 'Tracy']

由于Python是动态语言,所以lis

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python教程基础篇,超详细超长! 的相关文章

  • 在信号处理程序中使用变量 - 需要全局吗?

    我有一个信号处理程序来处理 ctrl c 中断 如果在信号处理程序中我想读取主脚本中设置的变量 那么在设置变量时是否有其他方法可以使用 全局 语句 我不介意这样做 但请阅读这篇文章 你在Python中使用 global 语句吗 https
  • Python - 将整数或字符串发送到 Spark-Streaming

    我可以通过 CSV 文件发送我的数据 首先 将我的随机数写入CSV文件然后发送 但是可以直接发送吗 我的套接字代码 import socket host localhost port 8080 s socket socket socket
  • python: 将“5,4,2,4,1,0”转换为 [[5, 4], [2, 4], [1, 0]] [重复]

    这个问题在这里已经有答案了 有没有一种 直接 的方法来转换包含 数字到 x y 整数列表中 from 5 4 2 4 1 0 3 0 5 1 3 3 14 32 3 5 to 5 4 2 4 1 0 3 0 5 1 3 3 14 32 3
  • _启动服务器时 Django 中出现死锁错误

    我在启动 python 服务器时多次遇到此错误 当我更改任何文件并且服务器再次启动时也会发生这种情况 我尝试删除环境并重新创建环境 但仍然存在相同的错误 Python 3 5 2 默认 2018 年 11 月 12 日 13 43 14 G
  • 在Python中使用子文件夹的名称为每个子文件夹创建空文件

    如果我的文件夹结构如下 folder sub1 sub1 1 sub1 sub1 2 sub1 sub1 3 sub2 sub2 1 sub2 sub2 2 sub2 sub2 3 我想让每个子文件夹的文件使用子文件夹的名称 我怎样才能用P
  • 如何将字符串转换为电话号码

    我一直被这个问题困扰了很长时间 这就是问题 编写一个函数 以字符串作为参数并返回电话号码 对应于该字符串作为结果 电话号码也应该是一个字符串 转换规则是标准单词到电话号码的规则 a b 或 c 映射到 2 d e 或 f 映射到 3 g h
  • 日期时间:打印为秒

    我有一个datetime目的 我想将其打印为秒数 即 1 分 30 5 秒应打印为 90 5 秒 似乎找不到办法做到这一点strftime 我认为对于您的情况 您最好使用 datetime timedelta 对象 它有一个函数可以完全满足
  • 如何使用Python根据Excel中的文本更改颜色?

    在Excel单元格中 通过和失败的文本会有所不同 我必须分别为通过 通过 通过 通过 提供绿色背景颜色 为失败 失败 失败 失败 提供红色背景颜色 如何根据文本更改颜色 我的脚本 import xlwt workbook xlwt Work
  • 子进程+多重处理-按顺序执行多个命令

    我有一组命令行工具 我想在一系列文件上并行运行 我写了一个 python 函数来包装它们 看起来像这样 def process file fn print os getpid cmd1 echo fn p subprocess Popen
  • 如何测试 Python readline 完成情况?

    我正在用 Python 编写一个命令行界面 它使用 readline 模块来提供命令历史记录和完成 虽然在交互模式下一切正常 但我想对完成功能运行自动化测试 我天真的第一次尝试涉及使用文件作为标准输入 my app lt command f
  • 以元组作为参数的新样式格式

    为什么我不能使用元组作为新样式格式化程序的参数 string format 它在旧风格 字符串 中工作正常吗 这段代码的工作原理 gt gt gt tuple 500000 500 5 print First item d second i
  • 将二进制解码为pdf

    我正在使用一个平台 当您将 pdf 上传到该平台时 它会使用 Python 中的 base64 编码转换 pdf 然后它将二进制字符串存储在数据库中 现在我想解码字符串并将它们写入本地文件夹 所以我想使用 with open 结构并向其传递
  • 根据第二个数据帧中的日期范围对一个数据帧中的值求和

    我有两个数据框 下面的简化示例 一个包含一系列日期和值 df1 第二个包含日期范围 df2 我想识别 选择 屏蔽 df1 中 df2 的日期范围 对关联的 df1 值求和并将它们添加到 df2 中的新列 我是一个新手 我尝试过的所有技术都不
  • 导入 nltk 时 Flask WSGI 应用程序挂起

    我按照说明进行操作here https beagle whoi edu redmine projects ibt wiki Deploying Flask Apps with Apache and Mod WSGI在 ubuntu 上使用
  • 使用 NLTK 生成字典以将推文分类为预定义类别

    我有一个 Twitter 用户 screen names 列表 我需要根据他们的兴趣领域将他们分为 7 个预定义类别 教育 艺术 体育 商业 政治 汽车 技术 我用 Python 提取了用户的最后 100 条推文 并在清理推文后为每个用户创
  • 如何获取函数内的函数对象(Python)

    我想要有类似的东西 def x print get def name 但不一定知道名字x 理想情况下它会返回 x 其中 x 是函数的名称 您可以使用 Python 的内置检查库来完成此操作 如果您想处理更复杂的情况 您可以阅读更多其文档 但
  • 从 S3 存储桶下载 300 万个对象的最快方法

    我尝试过使用 Python boto 多处理 S3cmd 和 J3tset 但都在努力解决 有什么建议 也许是您一直在使用的现成脚本或我不知道的其他方式 EDIT eventlet boto 是一个有价值的解决方案 如下所述 在这里找到了一
  • HTTP实时音频流服务器

    作为概念验证 我需要创建一个 HTTP 服务器 该服务器在 GET 请求时应启动连续的非编码 非压缩音频数据流 WAV PCM16 我们假设音频数据是 4096 个随机生成的单声道音频样本块 采样率为 44 1kHz 我应该在 HTTP 响
  • 如何计算python 2D散点占用面积

    我使用 matplotlib 绘制了这两个 2000 个点的序列 从图片上看 前2000点占用的面积比后2000点要小 但如果我想定量计算2000个点的第一序列和第二序列占用了多少面积 该怎么办 我真的很感谢任何帮助 建议或意见 非常感谢
  • Jupyter Notebook 输出中仅部分显示图表

    我正在尝试获取一个类似于此链接中显示的 2 的 PyLDAvis 图 您可以立即看到它 主题间距离图和前 30 个最显着的术语 http nbviewer jupyter org github bmabey hacker news topi

随机推荐

  • 学习二叉树必须要了解的各种遍历方式及节点统计

    哈喽 大家好 我是小林 今天给大家分享一下对二叉树的一些常规操作 愿我们都能保持一颗向上的心 目录 一 前序遍历 二 中序遍历 三 后序遍历 四 统计节点个数 五 统计叶子节点个数 六 第K层的节点个数 七 二叉树的深度 八 查找值为x的节
  • bash 刷题leetcode

    题目一 给定一个文本文件 file txt 请只打印这个文件中的第十行 示例 假设 file txt 有如下内容 Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9
  • Revit更改用户选择

    private void ChangeSelection Document document UIDocument uidoc new UIDocument document Autodesk Revit UI Selection SelE
  • 2014 奇虎360 笔试主观题

    1 在审计某一开源项目的代码时 假设有下面一个foo 子函数的实现 从安全的角度看 会存在安全漏洞吗 有的话 请 1 描述漏洞细节 2 说明可以利用的方法 3 还有该怎么修补漏洞 没有的话 也请说明为什么 int foo void func
  • QT.setStyleSheet()用法

    1 基本用法 textViewer gt setStyleSheet background color 00FF00 背景颜色 color FF0000 前景色 color rgb 255 0 0 color rgbd 255 0 0 0
  • selenium+java实现web自动化例子

    简单记录 有不正确的地方请指出 selenium java可以实现对web页面的自动化控制 在公司内部比较稳定 页面迭代较少的后台web系统使用时非常有效 web自动化收益最大化的情况 1 多更新于后端 前端页面迭代较少 2 在日常迭代中页
  • C++vector容器

    vector容器被称为动态数组 也被称为向量 它与array容器的区别是 array是静态数组 动态扩展 并不是在原空间之后续接新空间 而是找更大的内存空间 然后将原数据拷贝新空间 释放原空间 at 函数 返回对矢量中指定位置的元素的引用
  • 第零章 内核网络相关配置选项--基于Linux 3.10

    Kconfig选项 packet protocol 被直接和网络设备通信的应用程序使用 其没有使用内核的其它协议 像tcpdump支持需要使能该选项 af packet lt gt Packet socket 支持PF PACKET套接字
  • kubeadm构建(Calico+Dashboard+Containerd)

    文章目录 前言 一 环境 二 部署容器网络 CNI master操作 1 下载yamll 2 修改yaml 3 部署 三 部署 Dashboard 1 下载yaml 2 修改yaml 3 部署 4 创建管理员 四 切换容器引擎为Contai
  • 区块链开发之Solidity编程基础(一)

    Solidy是当前编写智能合约的主流语言 概要 sol文件结构 编译开发 引入其他文件 注释 代码注释 文档注释 合约 状态变量 类型 值类型 1 布尔类型 2 整型 3 地址 4 定长字节数组 5 有理数和整型字面量 6 枚举类型 7 函
  • controller与servlet的区别

    理解1 你可以理解为 Spring MVC是基于servlet的 它有一个DispatherServlet 然后它负责处理请求 并且调用了你的controller 打一个比方 web网站是应用程序么 你可以说浏览器是一个应用程序 而web网
  • ElementUi tab组件切换导致echarts宽度变窄问题

    解决tab组件变成100px的问题 使用echarts实例自带的resize 方法
  • 大话数据结构:栈与队列(1)

    栈 限定仅在表尾进行插入和删除操作的线性表 栈顶 允许插入和删除的一端 栈底 不允许插入和删除的一端 空栈 不含任何数据元素的栈 后进先出的线性表 LIFO结构 进栈 栈的插入 出栈 栈的删除 元素数量多 出栈的变化会更多 栈的抽象数据类型
  • pytorch实战-图像分类(一)(数据预处理)

    目录 1 导入各种库 2 数据预处理 2 1数据读取 2 2图像增强 3 构建数据网络 3 1网络构建 3 2读取标签对应的名字 4 展示数据 4 1数据转换 4 2画图 5 模型训练 1 导入各种库 上代码 import os impor
  • QQ IDKey生成--一键加群

    今天网站用到一个点击链接调用qq自动加群的弹窗功能 感觉还挺方面 记录下来以备后用 首先打开qq推广首页http shang qq com v3 index html 然后登陆需要绑定的QQ号 选择左侧一键加群组件 左侧 请选择你创建的群
  • cdc多bit信号-握手处理

    对于多bit数据跨时钟 各个bit之间路径延迟不一样 源时钟域给的数据是2 b11 目的时钟域采样到的数据可能2 b10 因此两级触发器对于单bit数据跨时钟是可以用的 但是对于多bit数据跨时钟就会出错 握手处理的关键是利用源的时钟req
  • ev3的c语言编程软件,乐高EV3编程软件教育版下载

    乐高EV3编程软件教育版官方版是一款用于机器人编程的应用工具 乐高EV3编程软件教育版最新版可以通过可视化图标形式编程 用以控制机器人的各种动作指令 乐高EV3编程软件教育版操作起来比较简单 发挥你的想象 创造无限的编程可能 软件说明 乐高
  • 【随笔三】一篇文章理清 节流、防抖以及应用场景

    前言 防抖 和 节流 很多人特别容易把概念混倄 今天 一篇文章教你彻底理清其中的概念及应用场景 先说共同点 防抖 和 节流 函数都是为了 限制函数的执行频次 从而优化函数触发频率过高导致的响应速度跟不上触发频率 导致出现延迟 卡顿的现象以及
  • css设置背景图片大小_如何使用CSS设置背景图片大小?

    css设置背景图片大小 Introduction 介绍 As we all know that the images are a very responsive yet very creative way to display your w
  • Python教程基础篇,超详细超长!

    安装Python 前往 官网下载 对应平台对应工具 另外Python2 7版本和3 3版本并不兼容 所以开发时请注意使用Python的版本 作为Mac OS X使用者 其实更推荐 PyCharm IDE 安装之后直接使用即可 数据类型 计算