补充1.Python中不支持++,–这样的自增,自减操作,'++‘python中把+当成正号,’–‘python把’-'当成负号,负负得正,所以值就不会改变,后置++,–不支持
补充2.python中的整数可以和布尔值相加,如果相加进行算术运算,Ture当做1,False当做0,但是这样的操作是没有意义的
补充3.python中只有字符串类型!在python中,一个语句写完之后,可以加上分号,也可以不加,没影响,通常是不加的,如果多个语句写到同一行,这个时候语句之间,务必要加上分号
默认情况下, Python 的代码执行顺序是按照从上到下的顺序, 依次执行的
这种按顺序执行的代码,就叫顺序语句
条件语句就是根据一个具体条件成立与否来决定接下来的逻辑走向
举个例子,如果我认真敲代码,我就很容易找到工作,否则,毕业就失业,这里的认真敲代码就是条件,条件成立就执行容易找到工作,条件不成立,就毕业即失业,我们把它写成代码
(1)if
如果 expression 值为 True, 则执行 do_something1, do_something2,next_something
如果 expression 值为 False, 则只执行 next_something, 不执行 do_something1, do_something2
(2)if – else
如果 expression 值为 True, 则执行 do_something1
如果 expression 值为 False, 则执行 do_something2
(3)if – elif – else
如果 expression1 值为 True, 则执行 do_something1
如果 expression1 值为 False, 并且 expression2 为 True 则执行 do_something2
如果 expression1 值为 False, 并且 expression2 为 False 则执行 do_something3
注意:Python中的条件语句写法, 和很多编程语言不太一样.
1.if 后面的条件表达式, 没有 ( ), 使用 : 作为结尾.
2.if / else 命中条件后要执行的 “语句块”, 使用 缩进 (通常是 4 个空格或者 1 个 tab)来表示, 而不是 { }
3.对于多条件分支, 不是写作 else if, 而是 elif (合体了)
缩进和代码块
python中缩进非常重要!是不能乱写的
注意上述代码的区别:
在代码1 中, print(“world”) 有一级缩进, 这个语句属于 if 内的代码块, 意味着条件成立, 才执行, 条件不成立, 则不执行.
在代码2 中, print(“world”) 没有缩进, 这个语句是 if 外部的代码, 不属于 if 内部的代码块. 意味着条件无论是否成立, 都会执行
在python中,缩进表示代码块,在if,else,elif,while,for需要跟上代码块的部分,都是需要缩进表示的,当有多级嵌套的时候,当前语句属于哪个代码块,完全取决于缩进的级别
可以使用空语句进行占位, 并不会对程序的执行有任何影响
有些操作是需要反复执行的. 这种就需要使用循环
基本语法结构:
条件为真, 则执行循环体代码.
条件为假, 则结束循环
使用while循环注意:
1.循环变量的初始值
2.循环的判定条件
3.循环变量的更新语句
举几个例子
- 打印1 -10
2.计算 5 的阶乘
3.求 1! + 2! + 3! + 4! + 5!
这个程序用到了两重循环.
也就是在循环语句中也可以套循环
基本语法格式:
注意:
1.python 的 for 和其他语言不同, 没有 “初始化语句”, “循环条件判定语句”, “循环变量更新语句”, 而是更加简单
2.所谓的 “可迭代对象”, 指的是 “内部包含多个元素, 能一个一个把元素取出来的特殊变量”
举几个例子:
1.打印1-10
range是内键函数,(1,11)是前闭后开区间[1,11)
2.打印2,4,6,8,10
range(begin,end) -->[begin,end)
range函数还提供第三个函数表示"步长",默认值为1,这里步长为2,也就是一次让循环变量加二
3.打印10-1
步长可以是负数
4.求1-100的和
continue 表示结束这次循环, 进入下次循环,break 表示结束整个循环
想知道continue和break的具体用法,可以指路我的博客<分支语句和循环语句>,用法都是共通的
编程中的函数, 是一段 可以被重复使用的代码片段
举个例子:当我们要求数列的和,不用函数
我们可以看到这几组代码重复度是非常高的而我们把求和写成一个函数,减少代码冗余
创建函数/定义函数
形参列表中,形参之间使用,分隔。函数体要带一层缩进,函数执行到return,就意味着执行完了
函数名(实参列表) // 不考虑返回值
返回值 = 函数名(实参列表) // 考虑返回值
函数定义并不会执行函数体内容, 必须要调用才会执行. 调用几次就会执行几次
函数必须先定义, 再使用
在函数定义的时候, 可以在 ( ) 中指定 “形式参数” (简称 形参), 然后在调用的时候, 由调用者把 “实际参数”(简称 实参) 传递进去
这样就可以做到一份函数, 针对不同的数据进行计算处理
注意:
一个函数可以有一个形参, 也可以有多个形参, 也可以没有形参
一个函数的形参有几个, 那么传递实参的时候也得传几个. 保证个数要匹配
Python 是动态类型的编程语言, 函数的形参不必指定参数类型. 换句话说, 一个函数可以支持多种不同类型的参数
函数的参数可以视为是函数的 “输入”, 则函数的返回值, 就可以视为是函数的 “输出”
这两个代码的区别就在于, 前者直接在函数内部进行了打印, 后者则使用 return 语句把结果返回给函数调用者, 再由调用者负责打印
一个函数中可以有多个 return 语句
执行到 return 语句, 函数就会立即执行结束, 回到调用位置
一个函数是可以一次返回多个返回值的. 使用 , 来分割多个返回值
如果只想关注其中的部分返回值, 可以使用 _ 来忽略不想要的返回值
在这个代码中, 函数内部存在 x, y, 函数外部也有 x, y
但是这两组 x, y 不是相同的变量, 而只是恰好有一样的名字
变量只能在所在的函数内部生效
在函数 test() 内部定义的 x, y 只是在函数内部生效. 一旦出了函数的范围, 这两个变量就不再生效了
在不同的作用域中, 允许存在同名的变量
虽然名字相同, 实际上是不同的变量
注意:
在函数内部的变量, 也称为 “局部变量”
不在任何函数内部的变量, 也称为 “全局变量”
如果函数内部尝试访问的变量在局部不存在, 就会尝试去全局作用域中查找
如果是想在函数内部, 修改全局变量的值, 需要使用 global 关键字声明
注意:f,else,while,for这些关键字也会引入代码块,但是这些代码块不会对变量的作用域产生影响,在上述语句代码块内部定义的变量可以在外面被访问
调用函数才会执行函数体代码. 不调用则不会执行
函数体执行结束(或者遇到 return 语句), 则回到函数调用位置, 继续往下执行
把一个函数的返回值, 作为另一个函数的参数, 这种操作称为 链式调用
函数内部还可以调用其他的函数, 这个动作称为 “嵌套调用”
test 函数内部调用了 print 函数, 这里就属于嵌套调用
一个函数里面可以嵌套调用任意多个函数
递归是嵌套调用中的一种特殊情况, 即一个函数嵌套调用自己
举个例子:递归计算5!
递归的优点
1.递归类似于 “数学归纳法” , 明确初始条件, 和递推公式, 就可以解决一系列的问题.
2.递归代码往往代码量非常少.
递归的缺点
1.递归代码往往难以理解, 很容易超出掌控范围
2.递归代码容易出现栈溢出的情况
3.递归代码往往可以转换成等价的循环代码. 并且通常来说循环版本的代码执行效率要略高于递归版本
Python 中的函数, 可以给形参指定默认值
带有默认值的参数, 可以在调用的时候不传参
代码示例: 计算两个数字的和
当我们只想让用户知道结果,而我们想要知道其中间的执行过程时,我们可以引入参数默认值,如下图所示,当debug为True时,我们就可以看到其执行过程,此处debug=False 即为参数默认值. 当我们不指定第三个参数的时候, 默认debug的取值即为False
带有默认值的参数需要放到没有默认值的参数的后面
在调用函数的时候, 需要给函数指定实参. 一般默认情况下是按照形参的顺序, 来依次传递实参的,但是我们也可以通过关键字参数, 来调整这里的传参顺序, 显式指定当前实参传递给哪个形参
如上述 test(x=10, y=20) 这样的操作, 即为 关键字参数