前言
本篇是Python学习笔记系列的第(二)篇,主要介绍了Python基础语法相关知识,包括基本数据类型、条件/循环语句、函数等。
语法
Python的语法比较简单,采用缩进的方式,以下面的代码为例:
# print absolute value of an integer:
a = 100
if a >= 0:
print(a)
else:
print(-a)
- 以
#
开头的语句是注释 - 除去注释,每一行都是一个语句
- 当语句以冒号
:
结尾时,下方缩进的语句视为代码块
⚠️ Python是大小写敏感的,如果系错了大小写,程序会报错。
数据类型
Python能够直接处理的数量类型有以下几种:
-
整数
Python的整数没有大小限制,所以天生支持大数据运算。
-
浮点数
Python的浮点数也没有大小限制,但是超出一定范围就直接被表示为
inf
(无限大)。 -
字符串
以单引号
''
或双引号""
扩起来的任意文本。如果字符串有很多字符需要转义,就需要加很多
\
,为了简化Python允许用r''
表示''
内部的字符串默认不转义。如果字符串内部有很多换行,用
\n
写在一行里不方便阅读,Python允许使用'''...'''
的格式标识多行内容。多行字符串'''...'''
还可以在前面加上r
使用。 -
布尔值
一个布尔值只有
True
False
两种值(请注意大小写)。 -
空值
Python中一个特殊的值,用
None
表示。None
不等同于0
,因为0
是有意义的,而None
是一个特殊的空值。 -
此外,Python还提供了列表、字典等多种数据类型,还可以创建自定义的数据类型。
变量
Python在定义变量时不需要指定变量类型,这一点同静态语言(比如C语言)不一样,我们称之为动态语言(比如Swift)。
常量
在Python中通常使用全部大写的变量名来表示常量,这只是一种约定俗成的写法,其实Python中没有任何机制来保证常量不被改变。
另外说一下Python中的除法运算,有两种:
-
使用
/
计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数
-
使用
//
,俗称地板除整数的地板除永远是整数,即使除不尽(余数会被忽略)。
注:余数运算符:%
list
Python内置的有序集合,即可变数组,使用中括号 []
进行初始化。
>>> classmates = ['Michael', 'Bob', 'Tracy']
>>> classmates
['Michael', 'Bob', 'Tracy']
-
计算长度
>>> len(classmates) 3
-
可以用
-1
做索引,直接获取最后一个元素。以此类推,-2
-3
可以获取倒数第2个、倒数第3个。 -
追加元素到末尾
>>> classmates.append('Adam') >>> classmates ['Michael', 'Bob', 'Tracy', 'Adam']
-
插入到指定的位置,比如索引号为
1
的位置:>>> classmates.insert(1, 'Jack') >>> classmates ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
-
删除list元素,用
pop()
方法:# 删除末尾元素 >>> classmates.pop() 'Adam' >>> classmates ['Michael', 'Jack', 'Bob', 'Tracy'] # 删除指定索引元素 >>> classmates.pop(1) 'Jack' >>> classmates ['Michael', 'Bob', 'Tracy']
tuple
tuple和list类似,即不可变数组,tuple一旦初始化就不能修改,它没有append(),insert()这样的方法。
使用小括号 ()
进行初始化。
因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
>>> classmates = ('Michael', 'Bob', 'Tracy')
-
如何定义一个只有1个元素的tuple:
>>> t = (1,) >>> t (1,)因为如果写成
因为如果写成
t = (1)
就会产生歧义,这样写()
会被理解成数学公式中的小括号,定义的不是tuple,而是1
这个自然数。所以定义tuple时加上一个逗号,
来消除歧义
dict
Python内置字典,采用Key-Value键值对方式进行存储,使用大括号 {}
进行初始化。
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
-
通过
in
判断key是否存在:>>> 'Thomas' in d False
-
通过dict提供的
get()
方法,如果key不存在,可以返回None
,或者自己指定的value:>>> d.get('Thomas') >>> d.get('Thomas', -1) -1
-
删除一个key,用
pop(key)
方法
set
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
要创建一个set,需要提供一个list作为输入集合:
>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}
通过 add(key)
方法可以添加元素到set中,通过remove(key)
方法可以删除元素。
条件语句
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
循环语句
Python的循环有两种:
-
一种是for…in循环,依次把list或tuple中的每个元素迭代出来:
# Python提供一个 range() 函数,可以生成一个整数序列,再通过list()函数可以转换为list >>> list(range(5)) [0, 1, 2, 3, 4]
-
第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环:
sum = 0 n = 99 while n > 0: sum = sum + n n = n - 2 print(sum)
break
语句可以在循环过程中直接退出循环,而 continue
语句可以提前结束本轮循环,并直接开始下一轮循环
函数
Python内置了很多有用的函数,我们可以直接调用,不再赘述。
-
定义函数
定义一个函数要使用
def
语句,依次写出函数名、括号、括号中的参数和冒号:
,然后,在缩进块中编写函数体,函数的返回值用return
语句返回。如果你已经把
my_func()
的函数定义保存为func.py
文件了,那么,可以在该文件的当前目录下启动Python解释器,用from func import my_func
来导入my_func()
函数,注意func
是文件名(不含.py
扩展名) -
空函数
如果想定义一个什么事也不做的空函数,可以用
pass
语句:def nop(): pass
-
参数类型检查
数据类型检查可以用内置函数
isinstance()
实现:def my_abs(x): if not isinstance(x, (int, float)): raise TypeError('bad operand type') if x >= 0: return x else: return -x
-
返回多值
Python的函数返回多值其实就是返回一个tuple。在语法上,返回一个tuple可以省略括号。多个变量也可以同时接收一个tuple,按位置赋给对应的值。
-
默认参数
必选参数在前,默认参数在后。牢记一点:默认参数必须指向不变对象!
-
可变参数
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。
在list或tuple前面加一个
*
号,可以把list或tuple的元素变成可变参数。def calc(*numbers): sum = 0 for n in numbers: sum = sum + n * n return sum
-
关键字参数
关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
def person(name, age, **kw): print('name:', name, 'age:', age, 'other:', kw)
限制关键字参数的名字,可以用命名关键字参数,和关键字参数
**kw
不同,命名关键字参数需要一个特殊分隔符*
,*
后面的参数被视为命名关键字参数。例如,只接收
city
和job
作为关键字参数。这种方式定义的函数如下:def person(name, age, *, city, job): print(name, age, city, job)
如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符
*
了:def person(name, age, *args, city, job): print(name, age, args, city, job)
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
对于任意函数,都可以通过类似func(*args, **kw)
的形式调用它,无论它的参数是如何定义的。