前言
本篇是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使用。 - 
    
布尔值
一个布尔值只有
TrueFalse两种值(请注意大小写)。 - 
    
空值
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)的形式调用它,无论它的参数是如何定义的。