控制流程
1.判断语句
判断语句 对应的就是 如果 … 否则 …
条件成⽴ 做什么事, 条件不成⽴做什么事
很多的条件怎么处理
if elif else结构
- 语法
# if elif else 如果 ... 如果 ... 否则 ....
# 多个如果之间存在关系
if 判断条件1:
判断条件1成⽴,执⾏的代码
elif 判断条件2: # 判断条件1 不成⽴
判断条件2成⽴,执⾏的代码
elif ....:
pass
else:
以上 判断条件都不成⽴,才会执⾏的代码
# 1, elif 是关键字, 后边需要冒号, 回⻋ 和缩进
# 2, if elif else 的代码结构, 如果某⼀个条件成⽴,其他的条件就都不再判断
- 示例
x = 10
if x > 0:
print("x是正数")
elif x < 0:
print("x是负数")
else:
print("x为0")
#输出:x是正数
if – else 的一种新用法
在java 或者其他语言中,有类似于(condition)?a :b 这样的语法,表示如果condition 为真,返回a,反之,返回b。我们称之为三元运算。但在Python中,则没有这样的表达,Python借助于 if- else 可以时间同样的效果。示例如下:
a,b两个数,a>b 返回’more’,否则,返回less
python 还有另一种写法:
Debug 调试代码
我们使⽤ debug 的⽬的, 认为就是查看代码的执⾏过程的。
- 步骤
- 打断点
断点的意义是, debug 运⾏的时候, 代码会在断点出停下来不执⾏。
如果是想要查看代码的执⾏过程, 建议将断点放在第⼀⾏在代码 和⾏号之间 点击,出现的红⾊圆点 就是断点, 再次点击可以取消。
pycharm 软件存在⼀个问题, 想要 debug 运⾏,可能⾄少需要两个断点。
- 右键 DEBUG 运⾏
- 单步执⾏,查看执⾏过程
2. 循环语句
让指定的代码重复的执⾏。
1.while 循环
- 语法
1. 循环的初始条件(计数器)
# 2. 循环的终⽌条件
while 判断条件:
判断条件成⽴执⾏的代码
判断条件成⽴执⾏的代码
判断条件成⽴执⾏的代码
# 3. 计数器加1
# 1, 处于 while 缩进中的代码,称为是 while 的循环体
# 2, 执⾏顺序 1 2 3 2 3 2 3 2 3 2(条件不成⽴, 结束)
- 案例 求 1- 100 之间的累加和
#1 + 2 + 3 + ... + 99 + 100
#使⽤循环产⽣ 1-100 之间的数字
# 1. 定义计数器
i = 1
# 定义变量 保存求和的结果
num = 0
# 2. 书写判断条件
while i <= 100:
# 求和
num = num + i # 0 + 1 + 2 + 3 + ... + 100
i += 1
# 求和的结果 只需要打印⼀次, 所以放在循环的外边
print('求和的结果为:', num)
3.for循环
for 循环 也称为是 for 遍历, 也可以做指定次数的循环
遍历: 是从容器中将数据逐个取出的过程.
容器: 字符串/列表/元组/字典
- 语法
for 变量 in 字符串:
重复执⾏的代码
# 1, 字符串中存在多少个字符, 代码就执⾏多少次
# 2, 每次循环 会从字符串中取出⼀个字符保存到前边的变量中
# 3, for 和 in 都是关键字
- 示例
numbers = [1,2,3,4,5]
for num in numbers:
print(num)
- 循环遍历字典元素
d={"x":1,"y":2,"z":3}
#遍历字典中的键
for key in d:
print(key,"is",d[key])
#运行结果:
x is 1
y is 2
z is 3
d={"x":1,"y":2,"z":3,"a":11}
#遍历字典中的值
for value in d.values():
print(value)
#运行结果:
1
2
3
11
d={"x":1,"y":2,"z":3,"a":11}
#遍历键和值
for key,value in d.items():
print(key,value)
# 运行结果:
x 1
y 2
z 3
a 11
3.break跳出循环 :跳出并停止
numbers = [1,2,3,4,5]
for num in numbers:
if num == 3:
break
print(num)
#输出:1 2
4.continue:跳出该次循环,并不停止循环
numbers = [1,2,3,4,5]
for num in numbers:
if num == 3:
continue
print(num)
#输出:1 2 4 5
5.GET新技能–列表推导式
我们上面学习了 for 循环,利用 for,我们可以快速的构建列表,这就是我们将要将的列表推导式。先举个例子: 有个列表[1,2,3],我们要将他中的每个元素加1,组成另一个列表,常见做法如下:
我们用列表推导式用一行代码能起到同样的效果
[i+1 for i in a] 就一行代码起到了同样的作用。列表推导式能极大的简化代码,但是会增加可读性难度。其基本格式如下:
如上面的例子,要排除偶数,只对奇数操作,那么可以这样
如果对每个元素要进行的操作很复杂,那么可以传入一个函数,示例如下:
函数
定义
函数是一段可执行的代码,它将一些输入值转换为输出值,通过将代码逻辑封装在函数中,可以使代码更简洁、可
读性更好并且更易于维护。
函数的定义需要使⽤ 关键字 def, 单词 define
调用
1, 函数调⽤,就是使⽤ 多⾏代码的过程
2, 语法 函数名()
基本函数
def greet():
print("hello world!")
greet() #调佣greet函数,输出“hello world!"
上面的例子,函数名为 greet,他实际上相当于一个变量,指向了函数体在内存中的位置。这样, greet 就代表了这个而函数体,代码中 greet是指这个函数对象,greet()才是调用这个函数。
我们可以把函数名赋值给一个变量,那么,这个变量就指向了该函数名所对应的函数。注意,函数名 hi 不加()只是表示这个 hi 是对应的是一个函数对象,而没有调用它,加上()才会执行函数语句块里的内容,看下面代码:
如果定义一个函数,暂时还不知道这个函数要实现什么功能,或者还不知道怎么写功能,可以用pass来代替语句块
带参数的函数
def greet(name):
print("hello, "+name+"!")
greet("Alice") #调佣greet函数,输出“hello, Alice!"
greet("Bob") #调佣greet函数,输出“hello, Bob!"
在这个例子中,函数 greet 接受一个参数 name,并通过打印欢迎消息来使用它。在每次函数调用时,我们可以传入不同的参数值。
-
字符串,数字,元组都是不可变的,所以用他们做参数,在函数内部参数有任何变函数外的同名变量不会受影响,但如果可变元素则为参数,则…
-
参数位置 在调用函数是,如果传入的参数值加上参数名称,则参数位置可调换,看下面代码示例
-
默认参数 在定义函数时,可以给定传入参数的默认值,那么在调用函数时,可以不提供参数,或者部分提供,或者全部提供。定义函数的时候默认参数有值得注意的有两点:
- 默认参数必须是不可变的
- 默认参数必须在正常参数之后
- 可变参数在Python 中,传入的参数个数可以是可变得,可以是1个,2个…可以是任意个。
我们来举个例子,比如 打印出每次来访的人员名单,每次来的人员个数并不是一定的,
看示例虽然实现了功能,我们每次调用函数前都组装成一个列表作为参数传入,略显繁琐,python为我们提供了可变参数来解决类似的问题解决办法:
参数前加表示这个参数是可变参数,python 会自动把传进来的参数组装成一个元组。看示例
那么,我们之前的示例可以改为
5.关键字参数 可变参数是在函数调用时自动将传入的0个或者N个参数组装成一个 tuple,而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个 dict.可变参数是用 来表示,而关键字参数是用*来表示,看代码示例:
从上面例子我们可以看到,当我们不传任参数时,系统会认为我们传了一个空的dict,但我们传入1个或2个带参数名的参数时,系统会把所传入的参数组装成dict。
举个实际的例子来说明关键字参数在实际中的应用:比如函数 print_person()打印人员信息,收集过来的信息除姓名和性别外必填,其他都是非必填,那么关键字参数是如何来实现这个功能的,我们看下面代码示例:
6.参数组合在python中定义函数,可以把正常参数,默认参数,可变参数,关键字参数组合使用,但顺序必须是 正常参数,默认参数,可变参数,关键字参数。
定义一个包含所有参数的函数,并传入不同的参数调用
在实际工作中不建议将太多的参数组合,会影响函数的理解性。
返回值的函数
def add(a,b):
return a+b
result = add(3,5)
print(result) #输出:8
在这个例子中,函数 add 接受两个参数 a和b,并返它们的和。当我们调用函数 add 并将返回值赋给变量result 时,最终输出结果为8。
可以用Python 内置的 callable()函数来判定是否可以被调用
def hello(name):
print('hello',name)
y = hello
print(callable(y))# 输出True
x = 1
print(callable(x))# 输出False
记录函数,给函数写注释在函数体内用"""或者’''给函数写注释
class Debug:
"""
This is a class for debugging
"""
def __init__(self):
"""
This funtion only has one property
"""
self.x = 5
# debug
main = Debug()
print(main.__doc__) # This is a class for debugging
print(main.__init__.__doc__) # This funtion only has one property
__doc__方法是python的内置方法之一,该方法通常会输出指定对象中的注释部分,可以理解为对象的帮助文档。
Python中所有函数都有返回值,如果没有指定返回值,则默认为None
神秘的作用域
函数内的变量 被称为局部变量(与全局变量对应,全局变量可以暂时理解为 函数外的变量),参数的工作原理类似于局部变量。
函数内读取全局变量正常,但当函数内部的局部变量与全局变量同名时,函数内部对该变量的操作将仅影响局部变量,而不会影响全局变量。
- 函数内 读取全局变量的方法 globals(['name].
- 屏蔽全局变量
- 重新绑定全局变量–在函数内声明一个变量,且这个变量是全局变量
- 嵌套–函数内定义函数
没有名字的函数-- 匿名函数
我们上面介绍的函数都是通过 关键字 def +函数名()来定义的,那么,函数能不能没有名字,这样就不必担心函数名冲突了。
答案是肯定的,Python 中通过 lambda 关键字来定义匿名函数,匿名函数也是一个函数对象,也可以赋值给变量,在利用变量来调用函数。匿名函数示例如下:
表示这个函数接受两个参数x,y,并返回x-y
匿名函数对象赋值给了变量f,f指向了该函数,所以调用f(7,2)就是就是调用该匿名函数。