=

赋值语句有个比较特殊的用法就是,一句话对多个变量同时赋值:a,b=b,a 使用逗号分割要赋值的元素,这个就实现了元素交换了。

而实现这样是,Python 把两边都当作元组来处理了…… 也就是 (a,b) 和 (b,a) 。

if-else

代码格式:

1
2
3
4
5
6
7
8
9
if 表达式 1
代码块 1
elif 表达式 2
代码块 2
elif 表达式 3
代码块 3
...//其它elif语句
else
代码块 n

真假判断

对于 Python 来说,除了 True 和 False 以外,其他类型也可以用于决定真假。

  • 数字:0 0.0 为假,其他的为真。

  • 字符串:空字符的时候为 False,又字符为真。

  • 其他类型,None 是为假,其他的时候为真。

pass

Python 提供了一种用于占位,但是什么都不执行的语句 pass (这是因为 Python 没有大括号,所以有些分支需要暂时不写代码的时候,用 pass 填充)

assert

断言,后面跟着一个表达式,当表达式为假的时候,抛出异常。来保证程序符合预期的运行。

assert EXPRESSION , NOTE

EXPRESSION 表示表达式,用来返回 Bool 值,NOTE 是注释,抛出异常的时候会随着注释一起出来,NOTE 可以不写。

where

while 的格式:

1
2
while 条件表达式:  
代码块

for

Python 的 for 只支持增强循环,格式为:

1
2
3
4
for 迭代变量 in 序列:  
break
continue
代码块

这里一般使用 range(start,end) 来控制遍历次数,会返回一个 [start,end) 范围的 range 类型,start 可以不写,默认为 0.

zip()

当要同时遍历多个序列的时候,就可以使用函数 zip(a,b,c) 来将三个序列同一个下标的元素和合并成一个元组,然后元组集合组成一个 zip 类型,可以通过遍历 zip 类型来实现同时遍历多个序列:

1
2
3
4
5
a = [1, 2, 3, 4]  
b = [5, 6, 7, 8]
c = [9, 10, 11, 12]
for i in zip(a, b, c):
print(i)

然后输出:

1
2
3
4
(1, 5, 9)  
(2, 6, 10)
(3, 7, 11)
(4, 8, 12)

reversed(obj)

对于 list 来说,可以调用自己的 list.reverse() 将自己倒置一下。

但是不可变类型的序列来说,就没有办法修改自己了,因此引入了 reversed(obj) 方法。会返回一个倒置的自己,不过类型是 reversed 类型。可以遍历,想要改变的话,还是类型转换一下。

sort(obj)

和上面的那个一样,都是为了解决不可变类型的序列的。传入序列,返回一个排好序的列表(因为排序算法只能用列表实现嘛),格式:

1
list = sorted(iterable, key=None, reverse=False)

注意这里,key 传入的是一个 lambda 表达式,用于决定如何排列里面的元素。

函数

Python 的函数定义格式如下:

1
2
3
def 函数名(参数列表):  
//实现特定功能的多行代码
[return [返回值]]

函数名 本质上就是一个变量,里面存储着函数的地址。

参数

对于 Python 函数的参数来说,主要有以下需要注意的点:

  • Python 中的所有参数传递都是引用传递。

  • 可以使用关键词来传递参数,这样就不用记忆形参的位置了:

例子:

1
2
3
4
5
def get_name(first_name,last_name):  
return first_name+' '+last_name

print(get_name("Tempest","Xorex")) # 这个就是按照形参的顺序传入实参
print(get_name(last_name="Xorex", first_name="Tempest")) # 这个是根据关键词传递

  • 可以设置参数默认值,不过需要写在所有无默认值参数的后面,需要注意的是:参数默认值无法限制参数的类型:
1
2
3
4
5
def get_name(first_name,last_name,sex="man",high=10):  
return first_name+' '+last_name+' '+str(sex)+' '+str(high)

print(get_name("Tempest","Xorex",234,'woman'))
print(get_name(last_name="Xorex", first_name="Tempest"))

可设置参数提示,格式 参数名 : 类型名 主要是给编辑器和程序员看的。

1
def set_name(name:str)

返回值

Python 的返回值可以返回多个参数,用逗号分割开来,会自动打包成一个元组。

1
2
3
4
def get_name(first_name, last_name):  
return first_name, last_name

print(get_name("Tempest","Xorex"))

输出的内容就是一个元组。


Python 支持返回值提示,格式 def func_name() -> 返回类型

1
2
def get_name(self) -> str :  
return self.name

函数作用域

全局变量

Python 的全局变量只要在函数外面声明就可以了。

  • 在函数内部可以随意访问全局变量的值,但是不能赋值修改,因为一旦赋值就等于创建了一个新的,和全局变量重名的局部变量。如果想要赋值全局变量的话,有两种方法:
  1. globals()[var_name] = XXX 来获取全局变量的地址,从而完成修改。

  2. 另外一个就是单独声明一下这个全局变量,就是加上 global 这个关键字(注意不能赋值,只单独声明),然后后面对这个全局变量进行赋值就不是创建一个新的局部变量,而是操作全局变量了。

局部函数

可以在函数内部实现局部函数,也就是只有在函数内部调用的函数。函数名本质上就是存储指针地址的变量。这个变量的作用域也就是函数能调用的作用域。

当把这个函数的地址传递出去,让外界拿到函数的地址,也就是扩大了函数的作用域。

函数闭包

函数闭包详解

就是将函数的处理进行分阶段,第一阶段处理之后,返回一个新的函数,调用新函数处理第二阶段。

Lambda

用于元素生成一个 Callable 的函数,格式:name = lambda [list] : 表达式 其中 [list] 表示可选参数,里面是用来描述形参列表的,可以不写:

1
2
3
hello = lambda : "hello"  

print(hello())
1
2
x = lambda a, b : a * b
print(x(5, 6))

获取可操作变量

  • globals() 以字典的形式返回所有的全局变量。

  • locals() 返回当前作用域所支持的所有变量,也是字典。

  • vars(obj) 返回对象中类的所有属性。

eval() exec()

  • eval(expression,globals=None,locals=None)

  • exec(code,globals=None,locals=None)

都是输入字符串,然后执行,其中 eval 执行的是单个表达式,exec 可以执行复杂的代码块。其次 eval 执行完表达式之后会返回表达式的值。

对于 globals 表示的是可以使用的全局命名空间, locals 表示的是可以使用的局部命名空间。这两个东西因为了解的不是太多,所以具体使用以后再说。

函数式编程

Python 内置了用于实现函数式编程的函数,下面的 obj 内容必须是序列:

  • map(func,obj...) 对于序列 obj 的每一个元素,都执行 func 函数得到结果,然后将结果封装为类 list 类型的 map 类型返回。如果 func 函数有多个输入参数,那么就需要多个序列 obj1,obj2 。

  • filter(func,obj...) 这个 func 需要返回 Bool 类型,只有为 True 的序列元素输入,会被封装返回。如果输入多个参数(跟着多个 obj 序列输入),那么最后只输出对应输入的 Bool 值。

可变参数

  • *args : arguments

  • **kwargs : keyword arguments

固定格式是这样的:Func(*args,**kwargs) args 用元组保存直接传递进来的实参,kwargs 用字典保存使用 key=value 传进来的实参。

然后将保存到 序列 里面的实参进行分析使用即可。

1
2
3
4
5
6
7
8
9
10
11
12
# 定义了支持参数收集的函数  
def dis_str(home,*str,**course) :
print(home)
print(str)
print(course)
#调用函数
dis_str("C语言中文网",\\
"http://c.biancheng.net",\\
"http://c.biancheng.net/python/",\\
shell教程="http://c.biancheng.net/shell/",\\
go教程="http://c.biancheng.net/golang/",\\
java教程="http://c.biancheng.net/java/")

输出内容:

1
2
3
C语言中文网  
('http://c.biancheng.net', 'http://c.biancheng.net/python/')
{'shell教程': 'http://c.biancheng.net/shell/', 'go教程': 'http://c.biancheng.net/golang/', 'java教程': 'http://c.biancheng.net/java/'}