• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

游客您好
第三方账号登陆
  • 点击联系客服

    在线时间:8:00-16:00

    客服QQ

    2938366614

    电子邮件

    pcs2938366614@163.com
  • 友智园

    随时随地学习编程

  • 扫描二维码

    关注微信公众号

Lv.16 站长
1号会员,11532活跃度,2019/12/31 加入学习
  • 622发帖
  • 492主题
  • 7关注
  • 69842粉丝
官方账号
  • 满级大神

    用户达到16级即可
  • 老兵专属

    老用户专属勋章
  • 达人守护

    友智园守护达人
  • 牛气冲天

    2021新春活动专属
  • 虎虎生威

    2022虎年限定勋章
推荐课程更多
优秀讲师更多
课堂交流更多

python教程4-基本概念

[复制链接]
友智君官方认证 实名认证 发表于 2020-6-23 15:40:01 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
基本概念
: J% r0 v+ O) b1 X5 M0 u) @8 u8 B% V7 j0 i+ l6 n# b
仅仅打印“Hello World”就足够了吗?你应该想要做更多的事——你想要得到一些输入,然后做操作,再从中得到一些输出。在 Python 中,我们可以使用常量和变量来完成这些工作。
% b! y7 i! e' f9 C6 ]1 M* a' w. O  c
字面意义上的常量
6 N4 J3 x5 \+ A2 G8 A
7 b' f: g* K0 K一个字面意义上的常量的例子是如同 5、1.23、9.25e-3 这样的数,或者如同'This is a string'、"It's a string!"这样的字符串。它们被称作字面意义上的,因为它们具备 字面 的意义——你按照它们的字面意义使用它们的值。数 2 总是代表它自己,而不会是别的什么东西——它是一个常量,因为不能改变它的值。因此,所有这些都被称为字面意义上的常量。
/ S$ K& w! W! Z: Q7 R
9 u1 i; {) t0 A) ?( y
; i/ h# W: t* N: f/ B
% X* A* e: u# V* x* Q, c* x* B8 O4 D在 Python 中有 4 种类型的数——整数、长整数、浮点数和复数。$ W- R  Y8 r. L1 F1 a5 Y
  • 2 是一个整数的例子。
  • 长整数不过是大一些的整数。
  • 3.23 和 52.3E-4 是浮点数的例子。E 标记表示 10 的幂。在这里,52.3E-4 表示 52.3 * 10-4。
  • (-5+4j)和(2.3-4.6j)是复数的例子。
    & J0 n9 F. N6 s' J- X) d4 X. T

! o& V6 a" n+ v. ^8 m5 H$ H
* R8 b$ a7 s& t, Q字符串$ {' Q0 \. J$ u7 J
* B% a7 R- g) x
字符串是 字符的序列 。字符串基本上就是一组单词。
# C8 g: L. |, D" j3 j+ a6 w( h) j
我几乎可以保证你在每个 Python 程序中都要用到字符串,所以请特别留心下面这部分的内容。下面告诉你如何在 Python 中使用字符串。- u( \( S  E+ n. ]
: B4 [4 y# O: J" o. C. ~9 C
  • 使用单引号(')
  • 你可以用单引号指示字符串,就如同'Quote me on this'这样。所有的空白,即空格和制表符都照原样保留。
  • 使用双引号(")
  • 在双引号中的字符串与单引号中的字符串的使用完全相同,例如"What's your name?"。
  • 使用三引号('''或""")
  • 利用三引号,你可以指示一个多行的字符串。你可以在三引号中自由的使用单引号和双引号。例如:; K* {' \) A. Y& j, Z
. T. D, S4 s' ~$ g  [0 y; S
. [7 Q& I$ E# {$ B7 u' t/ N7 F
  1. '''This is a multi-line string. This is the first line. This is the second line. "What's your name?," I asked. He said "Bond, James Bond." '''
复制代码
. S# Z. u' u, k6 A
' ~8 U& ?# P8 ?

4 b( p( t# r5 i$ u( `& Z
  • 转义符
  • 假设你想要在一个字符串中包含一个单引号('),那么你该怎么指示这个字符串?例如,这个字符串是 What's your name?。你肯定不会用'What's your name?'来指示它,因为 Python 会弄不明白这个字符串从何处开始,何处结束。所以,你需要指明单引号而不是字符串的结尾。可以通过 转义符 来完成这个任务。你用\'来指示单引号——注意这个反斜杠。现在你可以把字符串表示为'What\'s your name?'。
    ( o' d: [% N8 U( W- w
7 N! D4 X, {8 D. ~: c0 ^

, J& V7 P$ c$ v( A# C5 ~' V另一个表示这个特别的字符串的方法是"What's your name?",即用双引号。类似地,要在双引号字符串中使用双引号本身的时候,也可以借助于转义符。另外,你可以用转义符\来指示反斜杠本身。
' b8 K. O3 Y, x/ q+ E
9 a0 B1 R: G! Z2 C值得注意的一件事是,在一个字符串中,行末的单独一个反斜杠表示字符串在下一行继续,而不是开始一个新的行。例如:
2 K3 f3 U: [& I; R& ]! _4 q
- K; y3 ?/ e2 J0 \
  1. "This is the first sentence.\
复制代码

. t% {2 Q" ^' l2 _
* y+ O5 v7 s  y; ^0 t7 ^等价于"This is the first sentence. This is the second sentence."6 `1 n# I3 v" H- L0 l! F# v0 H
  • 自然字符串
  • 如果你想要指示某些不需要如转义符那样的特别处理的字符串,那么你需要指定一个自然字符串。自然字符串通过给字符串加上前缀r或R来指定。例如r"Newlines are indicated by \n"。
  • Unicode 字符串
  • Unicode 是书写国际文本的标准方法。如果你想要用你的母语如北印度语或阿拉伯语写文本,那么你需要有一个支持 Unicode 的编辑器。类似地,Python 允许你处理 Unicode 文本——你只需要在字符串前加上前缀 u 或 U。例如,u"This is a Unicode string."。
    ) Q1 G) y! d/ h! S. t- x/ Q
. p# ~& G# {( w/ a' H/ ^3 t) W6 ~
( w9 Y5 X2 ]( p7 H, ]
记住,在你处理文本文件的时候使用 Unicode 字符串,特别是当你知道这个文件含有用非英语的语言写的文本。, x! F/ r8 S( s  I' V7 w2 M* o
  • 字符串是不可变的
  • 这意味着一旦你创造了一个字符串,你就不能再改变它了。虽然这看起来像是一件坏事,但实际上它不是。我们将会在后面的程序中看到为什么我们说它不是一个缺点。
  • 按字面意义级连字符串
  • 如果你把两个字符串按字面意义相邻放着,他们会被 Python 自动级连。例如,'What\'s' 'your name?'会被自动转为"What's your name?"。
  • 给 C/C++程序员的注释
  • 在 Python 中没有专门的 char 数据类型。确实没有需要有这个类型,我相信你不会为此而烦恼。
  • 给 Perl/PHP 程序员的注释
  • 记住,单引号和双引号字符串是完全相同的——它们没有在任何方面有不同。
  • 给正则表达式用户的注释
  • 一定要用自然字符串处理正则表达式。否则会需要使用很多的反斜杠。例如,后向引用符可以写成'\1'或r'\1'。
    / I. x1 Y1 l* v3 o

) @8 a3 Y4 J3 P7 g: i& F
1 a  z7 G( d3 Z  P4 R# v3 b% f变量
5 Y2 R5 t5 a! L+ x! }5 D# f
. R; T6 o8 o% X8 w# X9 T1 B仅仅使用字面意义上的常量很快就会引发烦恼——我们需要一种既可以储存信息 又可以对它们进行操作的方法。这是为什么要引入 变量 。变量就是我们想要的东西——它们的值可以变化,即你可以使用变量存储任何东西。变量只是你的计算机中存储信息的一部分内存。与字面意义上的常量不同,你需要一些能够访问这些变量的方法,因此你给变量名字。& D7 x2 H9 m- w+ ^7 N

* @* O% ]; Q) q9 d# y标识符的命名* X# S2 g2 |) @

9 t. v( T: t9 j# Y% `变量是标识符的例子。 标识符 是用来标识 某样东西 的名字。在命名标识符的时候,你要遵循这些规则:8 X8 G3 Q* M! d* v

7 R7 [1 k/ i  X7 M; v
  • 标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’)。
  • 标识符名称的其他部分可以由字母(大写或小写)、下划线(‘ _ ’)或数字(0-9)组成。
  • 标识符名称是对大小写敏感的。例如,myname 和 myName 不是一个标识符。注意前者中的小写 n 和后者中的大写 N。
  • 有效 标识符名称的例子有 i、__my_name、name_23 和 a1b2_c3。
  • 无效 标识符名称的例子有 2things、this is spaced out 和 my-name。5 N3 U. B: R4 ?3 p: W
. J. ?6 x/ s0 X' q# N, P6 \( Q' g
& d/ {6 R2 y! D

% S. @/ N% U% U% K5 E. U* i) e  o$ K数据类型
/ x5 S9 {$ l, i" K
! b; ^, d& F" o) q# R" r: X变量可以处理不同类型的值,称为数据类型。基本的类型是数和字符串,我们已经讨论过它们了。在后面的章节里面,我们会研究怎么用类创造我们自己的类型。
0 [% |5 H; y# A2 O, \% F
3 e) e* `9 }6 b( l2 B( A* i) _! ^对象7 J" `8 N$ e" x9 C" c5 \3 k
2 u0 ?8 C4 X# B: U
记住,Python 把在程序中用到的任何东西都称为 对象 。这是从广义上说的。因此我们不会说“某某 东西 ”,我们说“某个 对象 ”。; W7 e! W% `1 a8 w

& f  Q1 B$ l# E! b8 b& }2 Y给面向对象编程用户的注释4 t- z' _, O( }4 K4 x8 e
就每一个东西包括数、字符串甚至函数都是对象这一点来说,Python 是极其完全地面向对象的。, [* `6 c- R% |6 z! A! E
8 Q3 U% Y) t* g; y* C$ F$ I. E( e
我们将看一下如何使用变量和字面意义上的常量。保存下面这个例子,然后运行程序。
; k' f' N$ N( {; g4 p1 c& s3 T, q$ r0 [! N3 }! k6 c* T( ~0 f8 V
如何编写 Python 程序8 Y. |  r0 j& g) {$ i' I* A
下面是保存和运行 Python 程序的标准流程。4 [7 U, R' e. X

$ W  B9 F; h" j# _' b7 ~- c2 m5 ~打开你最喜欢的编辑器。/ N- T- j2 g% f+ X

2 C6 n6 q1 C3 A" A& S$ F输入例子中的程序代码。8 u/ e+ e' p$ }$ D5 @9 ?/ r( E' C

1 f9 L3 h8 ?) q* X; H/ t2 Z用注释中给出的文件名把它保存为一个文件。我按照惯例把所有的 Python 程序都以扩展名.py 保存。8 `5 f/ g2 u" C$ S

9 X8 f# h! V7 F' n4 G6 B- C  I运行解释器命令 python program.py 或者使用 IDLE 运行程序。你也可以使用先前介绍的可执行的方法。3 P! X6 ^" n! K' I
7 ?$ B/ j# l, X: _
例 4.1 使用变量和字面意义上的常量  k: a" v! S  Y' v$ u6 J
  1. <p>
    7 J' \) f, g' B% k
  2. </p><p># Filename : var.py </p><p>i = 5 </p><p>print i</p><p> i = i + 1 </p><p>print i s = '''This is a multi-line string. This is the second line.''' </p><p>print s </p>
复制代码
/ i* V* W- U6 [  H1 v
1 ~/ e- w  ?- J/ z. P, F5 o- K0 T
(源文件:code/var.py)
: N* j  Y) K8 }! U6 Z& Y, E8 |6 O0 P1 I  ~0 ?% N% t0 I
输出8 v6 P1 P" G- T& y) o8 {, o

$ [# i" `. x( H6 {. X
  1. $ python var.py
复制代码

! z$ e2 P( i3 ]0 s6 }9 d& R: U0 S5 B) [
它如何工作! L$ }, ?/ O* O" [

, ~' r7 q. i6 G9 M! _5 _5 Z下面来说明一下这个程序如何工作。首先我们使用赋值运算符(=)把一个字面意义上的常数 5 赋给变量 i。这一行称为一个语句。语句声明需要做某件事情,在这个地方我们把变量名 i 与值 5 连接在一起。接下来,我们用print 语句打印 i 的值,就是把变量的值打印在屏幕上。- k% N& @5 }4 _# N
6 z' F3 W- X# l2 V
然后我们对i中存储的值加 1,再把它存回 i。我们打印它时,得到期望的值 6。% H! ^- [- v/ m' d+ Z2 x
! e8 i  g1 m4 \; ]
类似地,我们把一个字面意义上的字符串赋给变量 s 然后打印它。8 f6 L( Z, j9 F; W4 ]" A
1 T7 X5 r0 ]) z, C
给 C/C++程序员的注释
! y4 C+ f/ h) m- s9 S" h使用变量时只需要给它们赋一个值。不需要声明或定义数据类型。
$ z# Z6 Q& Y% b/ `8 z' C% o% S, s( k; p2 C
逻辑行与物理行# ]" _" L' ~; Z3 A- _/ @
! {" Z# ?8 r% V; a6 J% Y2 X$ x
物理行是你在编写程序时所 看见 的。逻辑行是 Python 看见 的单个语句。Python 假定每个 物理行 对应一个 逻辑行 。9 ]4 ~6 f$ p% F0 u1 f
5 X3 s% ]8 h- S/ a& o( ]
逻辑行的例子如 print 'Hello World'这样的语句——如果它本身就是一行(就像你在编辑器中看到的那样),那么它也是一个物理行。. ]8 s- I/ Q: K: ]' l& y- v

0 m; s# T" n$ ?+ d. }0 a5 s  X默认地,Python 希望每行都只使用一个语句,这样使得代码更加易读。
4 m) G) J* D' A& u' k. T" K) v- Q" u! Z; i
* D  n- X, @0 I: n% H& E如果你想要在一个物理行中使用多于一个逻辑行,那么你需要使用分号(;)来特别地标明这种用法。分号表示一个逻辑行/语句的结束。例如:
, `9 i  g  t0 X9 M# R+ M$ j7 H2 e# \! |' _- `2 w8 Q1 Y6 F
  1. i = 5
复制代码

0 s4 w7 j# y/ H1 m& Z: j8 |
9 t1 ]3 L5 S9 Z& x  ]  {- J+ b' }与下面这个相同:( Z; f. I7 P% W2 U

5 J' B! V4 U" K% K/ P/ r0 }
  1. i = 5;
复制代码

  }5 ]7 ~8 v* D$ Q- c/ z2 W9 M9 s8 G# y: Z
同样也可以写成:
; K" o. @( i) q+ e8 B. T' m& N* p2 v$ Q
  1. i = 5;print i;
复制代码
! _2 w) |3 ^! {
4 `2 C3 _; ]- i# {
甚至可以写成:
( f  O+ H1 a8 U/ Z8 O9 N9 r! P' p
* M' \; }: x2 Z6 i
  1. i = 5; print i
复制代码

0 f( A' @% ?8 v8 x! j: ]3 z( h8 [9 Z
然而,我强烈建议你坚持在每个物理行只写一句逻辑行。仅仅当逻辑行太长的时候,在多于一个物理行写一个逻辑行。这些都是为了尽可能避免使用分号,从而让代码更加易读。事实上,我 从来没有 在 Python 程序中使用过或看到过分号。; S, F# D" \' _

/ \' S9 d+ B; T# J8 @, U0 R下面是一个在多个物理行中写一个逻辑行的例子。它被称为明确的行连接。: E2 |$ M, g) S5 x: V
  P% y. o& U$ n8 z. P
s = 'This is a string. \ This continues the string.' print s
: t9 Z# @& P: I( j7 t; ?
" z' ~) }& t2 @) O( {它的输出:
5 d2 t' G* A# |8 x, T  {8 R, X9 a3 t
  1. <p>
    ( n) m, m& O% A, R/ X
  2. </p><p>This is a string. This continues the string. </p>
复制代码
* A' }( T. _! j& l1 a+ S! |. J
$ ?$ e. p4 f0 l5 E  \1 b' h+ L! b
类似地,7 h, i, {4 W- x, E2 U- F, v( E
- M8 D9 o: {. u% M
  1. print \ i
复制代码

; t- B) U8 e7 T6 l! d" J# k, V. g4 x* r$ D
与如下写法效果相同:: t  ]- P+ l' D$ x# F2 w
! l' A7 a# Q% h# j0 b0 @
  1. print i
复制代码
& S2 P* Z' J( G0 E+ F* _% a2 U: j* x
' N& o9 d* z. H/ r6 D" P4 P
有时候,有一种暗示的假设,可以使你不需要使用反斜杠。这种情况出现在逻辑行中使用了圆括号、方括号或波形括号的时候。这被称为暗示的行连接。你会在后面介绍如何使用列表的章节中看到这种用法。
# t9 O% q) {' w' X" I* y" h8 M! V% @
$ \+ N  M7 N" i3 ~* O3 Y" g缩进
/ {) n2 S0 f6 Q2 C8 V; ?) o* S: f' c+ g' q6 F" V
空白在 Python 中是重要的。事实上行首的空白是重要的。它称为缩进。在逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。
$ L1 T: D) a0 {* v' d( w( q1 O1 e' y6 K
这意味着同一层次的语句必须有相同的缩进。每一组这样的语句称为一个块。我们将在后面的章节中看到有关块的用处的例子。6 V6 k! y, J' D
# ]7 w6 D2 U2 W# U& _8 Q( a" l
你需要记住的一样东西是错误的缩进会引发错误。例如:
3 |( S' L8 Z' L% v6 o4 B
0 w+ }5 p, P# ]6 I& y6 ^( A$ q
  1. i = 5
复制代码

5 `! ^9 E2 v. \# V" K2 }
1 Z6 O4 L2 v+ f6 L2 s当你运行这个程序的时候,你会得到下面的错误:
# g; k0 k; B  s3 g$ i* w! W: C" L
  1. File "whitespace.py", line 4
复制代码
& {+ F% ?9 A: g
9 C& V% E& N7 ~, @+ ^8 ]
注意,在第二行的行首有一个空格。Python 指示的这个错误告诉我们程序的语法是无效的,即程序没有正确地编写。它告诉你, 你不能随意地开始新的语句块 (当然除了你一直在使用的主块)。何时你能够使用新块,将会在后面的章节,如控制流中详细介绍。
5 j- h6 \( g( a0 m. U/ T1 J2 u4 Y/ V, y+ C
如何缩进
* b2 d. o( i$ y! U; ^4 s8 K$ a  j不要混合使用制表符和空格来缩进,因为这在跨越不同的平台的时候,无法正常工作。我 强烈建议 你在每个缩进层次使用 单个制表符 或 两个或四个空格 。 选择这三种缩进风格之一。更加重要的是,选择一种风格,然后一贯地使用它,即 只 使用这一种风格。
1 `1 M9 r; u7 r5 j- m5 `2 s' C5 d3 q: J4 g3 X5 s5 ~

1 I6 V% ^) _7 K; ~3 g( S6 y概括
: w4 e# d; J* E0 V' x* w" B9 d2 M3 P' [( H6 `
现在我们已经学习了很多详细的内容,我们可以开始学习更加令你感兴趣的东西,比如控制流语句。在继续学习之前,请确信你对本章的内容清楚明了。( T$ {0 O, a2 y7 z2 a2 l
9 B8 s: P+ N  U& p) L- @  c* D
客服QQ:2938366614

精彩评论20

woxing 发表于 2020-7-5 10:52:08 | 显示全部楼层
顶起出售广告位, g" t4 p. `' ?: ?4 o. Q
该用户还没有理想!
king0014 发表于 2020-7-5 10:52:29 | 显示全部楼层
佩服佩服!
- W7 @# p/ m5 P3 L- T) y
该用户还没有理想!
夏雪秋影 发表于 2020-7-5 10:52:29 | 显示全部楼层
我也来顶一下..
, v; E$ ]* R1 [6 e! j
该用户还没有理想!
小果果 发表于 2020-7-5 10:52:29 | 显示全部楼层
不错 支持下
, J) ?0 C6 x0 p0 C, h
该用户还没有理想!
fanjiekai 发表于 2020-7-5 10:52:34 | 显示全部楼层
是爷们的娘们的都帮顶!大力支持' f6 R/ o- g- `6 b
该用户还没有理想!
492048403 发表于 2020-7-5 10:52:34 | 显示全部楼层
顶起出售广告位# n6 t6 E9 N+ B1 E# [6 ]
该用户还没有理想!
緣如噫 发表于 2020-7-5 10:52:34 | 显示全部楼层
啥玩应呀) I: ^3 p  n8 ^+ Q  x4 E+ c
该用户还没有理想!
刘军 发表于 2020-7-5 10:54:51 | 显示全部楼层
广告位,,坐下看看
; k& P' Z3 d  J
该用户还没有理想!
玩子 发表于 2020-7-5 10:54:51 | 显示全部楼层
顶顶更健康. |. S7 D$ ~; O& b7 @
该用户还没有理想!
懒得打字嘛,点击右侧快捷回复 【友智园专属】
您需要登录后才可以回帖 登录 | 立即注册 手机动态码快速登录

本版积分规则

关于我们
  • 关注官方微信

  • QQ在线客服

    在线联系
  • 友智园
  • 山东省菏泽市


Copyright © 2019- PCS Rights Reserved