1 几个概念
1.1 表达式
- 类似于数学公式的东西
- 举例:1+1;2*4
- 结论:表达式不会对我们的程序产生实质性的影响,一般仅用于计算一些结果。如下图:
如何让表达式产生影响呢?如下图,print(1+2),输出的就是3:
1.2 语句
- 定义:由一个词或句法上有关联的一组词构成
- 功能:在程序中一般用语句来完成某种功能
- 注意:交互模式中不一定会输出语句的执行结果
1.2.1 if语句
我们在Pycharm中输入如下语句:
a=6;
if a>5:
print('Hello')
print('123')
print('abc')
输出结果为:
Hello
123
abc
补充一下:这里:
print('Hello')
print('123')
print('abc')
就是一个代码块,即要执行一起执行,要不执行都不执行。
1.2.2 pass语句
- 一个空(null)操作,在执行时没有任何反应,是为了保持程序结构的完整性。 pass 不做任何事情,一般用做占位语句。
- 例如,输入如下代码:
for letter in 'Python':
if letter == 'h':
pass
print('This is pass block')
print('Current Letter :', letter)
print("Good bye!")
运行结果如下:
Current Letter : P
Current Letter : y
Current Letter : t
This is pass block
Current Letter : h
Current Letter : o
Current Letter : n
Good bye!
1.3 程序
- 程序 = 语句 + 表达式
- 换言之,程序就是由一条条语句和一条条表达式构成的(其中语句比较简单,真正难学的是表达式)
1.4 函数
- 函数就是一个语句,函数是为了完成特定的功能
- 形如:XXX()
- 例如:print()
这里着重说一下print函数的用法:
print(value,...,sep=' ',end='\n',file=sys.stdout,flush=False)
举例说明如下:
user_name='Shero'
user_age=22
# 同时输出多个变量和字符串,指定分隔符
print('作者:',user_name,' 年龄:', user_age, sep='|')
结果为:
作者:|Shero| 年龄:|22
而file
参数的作用是指定print()
函数的输出目标:
f=open('poem.txt',"w")
print('wuyuge',file=f)
print('Shero',file=f)
f.close()
此时在同一个project中新建了一个名为poem.txt
的文档,内容为:
1.4.1 函数的分类
- 内置函数(或称内建函数)built-in
Python语法规定存在的函数,Python自带的函数,可以直接用,亲生的!
我们可以进入Python官网查询Python3.6自带的函数,官方对每一个都进行了详细的解释:
- 自定义函数
以关键字 def 开头,函数名要符合标识符命名规范,XXX()。语法如下:
def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expression]
举例:
# 定义函数
def printme( str ):
"打印传入的字符串到标准显示设备上"
print(str)
return
1.4.2 函数的参数
def functionname( parameters ):
其中括号中parameters的内容表示函数的参数,可以一个或多个,多个要用英文逗号隔开。如下:
1.4.3 函数的返回值
举例如下:
但要注意,并不是所有函数都有返回值。
2 标识符
先为大家引入Python语言的八大组成,这里注意,这八个组成在所有语言中基本通用,只不过不同语言表现形式不同,但其编程思想是一模一样的。
正如上图中提到的,标识符的命名:
name1
1name (不能以数字开头)
print=3,print(print) (不要使用内建函数的名称)
进一步,在Pycharm中我们可以用下面的代码来查看所有的关键字:
import keyword
print(keyword.kwlist)
得到如下关键字:
[‘False’, ‘None’, ‘True’, ‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]
3 基本数据类型
- 定义:变量值的类型,也就是可以为变量赋哪些值
3.1 整型
- int型,其最大固定值异常大,大到无法想象
- 如果一个数非常大,可以使用下划线来分割
3.2 浮点型
- float型,如a=1.2,b=6.6
这里为什么会出现0.1+0.2,输出结果为0.30000000000000004呢?
原因:进制的转化导致小数运算会得到不太精确的结果。0.1、0.2是十进制,计算机在运算前会先把它们转化成二进制,如0.1转换成二进制为0.0001100110011001100110011001100110011001100110011001101(见进制转换网站)但是,其实该结果已经无限接近0.3了,其产生的误差可以忽略不计,且其它的语言(只要支持浮点型)都有这个问题。
输入如下代码:
print(1+2)
print(1.0+2)
print(1.0+3.0)
print(1*2)
print(1.0*2)
print(1.0*2.0)
得到:
3
3.0
4.0
2
2.0
2.0
因此我们不难发现一个规律:运算中有浮点数,返回的结果类型就是浮点型。
3.3 布尔型
- 只有两个值,True 和 False
- 表示逻辑判断
这里,我们输入1+‘1’,显示无法运算:
下面我们又输入 1+True 和 1+False ,结果如下:
这说明:布尔类型实际上也属于整型,True相当于1,False相当于0!
同时,下面相当于写了一个死循环:
这里的while True:
也可以写成 while 1:
,是一样的。
3.4 空值
- None,表示不存在
- 返回None证明返回的结果有问题
4 变量
- 计算机内存中的一块区域
- 通俗地讲,变量就是给数据起个名字
- 可用于保存字面量(字面的值)
- 变量命名也要符合标识符命名的规范,详见第2小节
- 例如,a=3,相当于标签a贴在了对象3上面
Python为每个对象开辟了内存空间,区域和区域要划分开
这里尤为注意的是:
两个对象相等 ≠ 两个对象是同一个对象
如何理解?请看例子。
输入如下代码:
s1={'Shero':'Python'}
import copy
s2=copy.deepcopy(s1)
print(s2)
print(id(s1))
print(id(s2))
print(s1==s2)
得到
{'Shero': 'Python'}
1370186653560
1370186707304
True
这里用到的 id()
函数是用来检查两个对象返回的结果是不是同一个对象的函数,结果相等,说明它们的内存空间一样,是同一个区域。
因此,由s1==s2返回的值是True知道两个对象相等,满足等式左边;又由id(s1)≠id(s2),说明不是同一个对象。
更为形象一点的理解就是,两个双胞胎,看起来一模一样,但它们终究不是同一个人。
5 字符串
5.1 入门
- 一对单引号或一对双引号所包裹的内容就是字符串
我们用type()
函数查看数据类型,输入:
print(type(522))
print(type('522'))
print(type(5.22))
print(type(True))
print(type(None))
得到:
<class 'int'>
<class 'str'>
<class 'float'>
<class 'bool'>
<class 'NoneType'>
而当我们输入a='abc"
时,出现报错:
同样,输入a='what's up?'
,也出现了报错:
原因:解释器分不清哪两个引号是一对
怎么解决?
- 办法一:改成双引号,此时就没有问题了。
- 办法二:用到5.2 小节中介绍的转义字符,这里先给出解决结果。
5.2 转义字符
- 以反斜杠 \ 开头
- 回到上一小节,也就是要高速解释器,what’s中的单引号,不要把它当成单引号,当做普通字符就可以了
再给几个例子如下:
a='窈窕淑女,\t君子好逑'
b='窈窕淑女,\n君子好逑'
c="c:\news"
d="c:\\news"
e=r"c:\news"
f=r'c:\news'
print(a)
print(b)
print(c)
print(d)
print(e)
print(f)
得到:
窈窕淑女, 君子好逑
窈窕淑女,
君子好逑
c:
ews
c:\news
c:\news
c:\news
我们一个个分析:
- 第一个
\t
为制表符,tab键 - 第二个
\n
为换行符 - 第三个误把字符串中的一部分\n当成了换行符
- 第四个再加入一个
\
转义字符解决了该问题 - 第五、六个给出了另一个解决办法,在一对单引号或一对双引号前加上
r
,r表示raw天然字符串,意思是引号里面什么符号都没有意义。
5.3 长字符串/文档字符串
- 当我们在输入一行很长的字符串,想换行时,怎么办?
- 办法一:使用
\n
转义字符 - 办法二:使用三重引号
印证如下:
也就是说,三重引号中的内容类似于文档。
6 两个小作业
6.1 作业一
a,b=6,8,现在想让a=8,b=6,怎么办?两种方法。
办法一:
a=6
b=8
c=b
b=a
a=c
print(a,b)
得到:
办法二:
a=6
b=8
a=a+b
b=a-b
a=a-b
print(a,b)
结果为:
6.2 作业二
用print语句,两种方法打印出:hello,python
结果如图所示: