第一个Python程序
命令行模式
在Windows开始菜单选择“命令提示符”,进入命令行模式,提示符类似C:\>。
Python交互模式
在命令行模式下敲命令python
,进入Python交互模式,提示符是>>>
。相当于启动了Python解释器。
区分命令行模式和Python交互模式。
1.在命令行模式下,可以执行python
进入Python交互式环境,也可以执行python hello.py
运行一个.py
文件。执行一个.py
文件只能在命令行模式执行。相当于启动了Python解释器。
2.在命令行模式运行.py
文件和在Python交互式环境下直接运行Python代码有所不同。Python交互式环境会把每一行Python代码的结果自动打印出来,但是,直接运行Python代码却不会。
Python交互模式的代码是输入一行,执行一行,而命令行模式下直接运行.py
文件是一次性执行该文件内的所有代码。
在Python交互式模式下,可以直接输入代码,然后执行,并立刻得到结果。
在命令行模式下,可以直接运行.py
文件。
输入和输出
输入:用print()
在括号中加上字符串,多个字符串用逗号“,”隔开。
输出:用input()存放到一个变量里。
数据类型和变量
数据类型
1.整数
2.浮点数
3.字符串:单引号'
或双引号"
括起来的任意文本。
4.转义字符\
可以转义很多字符,比如\n
表示换行,\t
表示制表符,字符\
本身也要转义,所以\\
表示的字符就是\。
用r''
表示''
内部的字符串默认不转义。
用'''...'''
的格式表示多行内容。
5.布尔值:只有True
、False
两种值。
6.and
运算是与运算,只有所有都为True
,and
运算结果才是True。
or
运算是或运算,只要其中有一个为True
,or
运算结果就是True。
not
运算是非运算,它是一个单目运算符,把True
变成False
,False
变成True。
7.空值:用None
表示。
变量
变量名必须是大小写英文、数字和_
的组合,且不能用数字开头。
等号=
是赋值语句
Python解释器干了两件事情:
-
在内存中创建了一个
'ABC'
的字符串; -
在内存中创建了一个名为
a
的变量,并把它指向'ABC'
常量
Python的整数没有大小限制。
Python的浮点数也没有大小限制,但是超出一定范围就直接表示为inf
(无限大)。
字符串和编码
1.ord()
函数获取字符的整数表示,chr()
函数把编码转换为对应的字符。
2.字符串类型是str。
保存到磁盘上,就需要把str
变为以字节为单位的bytes
。
3.区分'ABC'
和b'ABC'
,前者是str
,后者虽然内容显示得和前者一样,但bytes
的每个字符都只占用一个字节。
占位符 | 替换内容 |
---|---|
%d | 整数 |
%f | 浮点数 |
%s | 字符串 |
%x | 十六进制整数 |
4.format():使用字符串的format()
方法,它会用传入的参数依次替换字符串内的占位符{0}
、{1}
……。
5.f-string:字符串如果包含{xxx}
,就会以对应的变量替换。
使用list和tuple
list:列表,可变的有序表。(可变)
tuple:有序列表是元组,tuple一旦初始化就不能修改。(不可变)
条件判断
1.elif
是else if
的缩写,完全可以有多个elif
,所以if
语句的完整形式就是:
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
2.input()
返回的数据类型是str
,str
不能直接和整数比较,必须先把str
转换成整数。
循环
1.for...in循环
依次把list或tuple中的每个元素迭代出来。
range()
函数,可以生成一个整数序列,再通过list()
函数可以转换为list。
2.while循环
只要条件满足,就不断循环,条件不满足时退出循环。
在循环中,break
语句可以提前退出循环。
在循环中,continue
语句跳过当前的这次循环,直接开始下一次循环。
使用dict和set
dict:dict全称dictionary,也称为map,使用键-值(key-value)存储,具有极快的查找速度。
dict内部存放的顺序和key放入的顺序是没有关系的。
和list比较,dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
而list相反:
- 查找和插入的时间随着元素的增加而增加;
- 占用空间小,浪费内存很少。
dict是用空间来换取时间的一种方法。
dict的key必须是不可变对象。
set
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
要创建一个set,需要提供一个list作为输入集合。
set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。
调用函数
求绝对值的函数abs
定义函数
定义一个函数要使用def
语句,依次写出函数名、括号、括号中的参数和冒号:
,然后,在缩进块中编写函数体,函数的返回值用return
语句返回。
空函数:用pass
语句,可以用来作为占位符
函数可以同时返回多个值,但其实就是一个tuple。
函数的参数
1.power(x, n)
函数,可以计算任意n次方
2.3.定义可变参数和关键字参数的语法:
*args
是可变参数,args接收的是一个tuple;
**kw
是关键字参数,kw接收的是一个dict。
3.调用函数时如何传入可变参数和关键字参数的语法:
可变参数既可以直接传入:func(1, 2, 3)
,又可以先组装list或tuple,再通过*args
传入:func(*(1, 2, 3))
;
关键字参数既可以直接传入:func(a=1, b=2)
,又可以先组装dict,再通过**kw
传入:func(**{'a': 1, 'b': 2})
。
递归函数
1.计算阶乘n! = 1 x 2 x 3 x ... x n
,用函数fact(n)
表示
2.递归函数优点:逻辑简单清晰,缺点:过深的调用会导致栈溢出。
3.针对尾递归优化的语言可以通过尾递归防止栈溢出。尾递归事实上和循环是等价的,没有循环语句的编程语言只能通过尾递归实现循环。
4.Python标准的解释器没有针对尾递归做优化,任何递归函数都存在栈溢出的问题。