前言

在上一节的学习中。已经介绍了几种基本类型。包括字符串的定义,以及字符串中索引、切片、字符串拼接的使用方法。以及基本的整形数据运算。一些之前都没有了解过的运算符、比如 ** 乘方 //整数除法等。这一节,我们将学习最基本的流程控制工具,比如

  • if 条件判断
  • for 循环
  • while 循环

if-elif-else 判断


num = int(input("输入一个数字 :")) if num > 10:
print("input > 10")
elif num >=5:
print("input >= 5")
else:
print("input < 5")

多重判断 if-elif 以及最终所有条件都不满足的时候,执行的else

输入一个数字  :7
input >= 5

while 循环

while 循环也算是一种常见的循环方式,这种循环一般要在循环体类结束循环,或者通过条件的方式让其结束。并不能无限循环下去。


a,b = 0,1 while a < 100 : print(a,end=',') a,b = b,a+b print("循环结束")
  • a < 100 作为条件体,若满足条件返回true ,则执行循环体

while-else

while-else 则是在条件块不满足的时候,只会执行一次的代码块:

a,b = 0,1

while a < 100 :

    print(a,end=',')

    a,b = b,a+b
else:
print("条件不满足") print("跳出循环")

break 与 continue

  • break 则停止所有循环
  • continue 则跳出本次循环
  • 但不会在循环被 break 语句终止时被执行
a = 0
while a < 100 : a=a+1 if a % 2 != 0 :
continue print("偶数",a)

通过 continue 关键词来跳过一些不需要的循环


a = 0
while a < 100 :
a=a+1
if a == 33:
break
print(a)

打印到33后,通过break 直接结束掉循环

for 循环

for in 一般用于List 列表的遍历。

>>> words = ['a','abc','abcd']
>>> for item in words :
print(item,len(item)) a 1
abc 3
abcd 4
  • item 用于表示当前项
  • len() 函数用于计算字符串的长度

for-else

for i in range(10):
print(i) else:
print("循环结束")

else 则是在循环结束后(不满足条件后)执行的代码块,

当循环被break 终止后,则不会再执行else 的内容

range() 函数

range() 函数则是为了生成指定范围内的自然数,

range(5, 10)
5, 6, 7, 8, 9 # 这里的3 则表示步进
range(0, 10, 3)
0, 3, 6, 9 # 步进也可以是复数
range(-10, -100, -30)
-10, -40, -70

pass

pass 语句什么也不做。当语法上需要一个语句,但程序需要什么动作也不做时,可以使用它。

while True:
pass
print('a') print("end")

定义函数 def

def fib(n):

    result = []

    a,b = 0,1

    while a<n :

        result.append(a)

        a,b = b,a+b

    return result

print("fib start")

print(fib(100))

这里我们通过定义一个函数,无需指定其返回类型,这个函数fib(n) 则是打印出0——n 范围内的斐波那契数列。若是一个无返回类型呢?

  • 若函数内部不带有 return 则会返回一个 None
def demo():
print("no return") print(demo())
----------------------
no return
None

在函数被调用时,实际参数(实参)会被引入被调用函数的本地符号表中;因此,实参是通过 按值调用 传递的(其中 值 始终是对象 引用 而不是对象的值)

当一个函数调用另外一个函数时,将会为该调用创建一个新的本地符号表。

默认值定义法

def other(a,b=5):

    for i in range(b):
print(i,"-",a) other(10)
-------------------------
0 - 10
1 - 10
2 - 10
3 - 10
4 - 10

定义这个函数是为了理解默认值的用法,若不传入第二个打印次数,则默认使用5次,而传入的话,按照指定次数打印。

关键词参数

关键词函数是为了更加形象的说明传入的这个参数所在的位置以及参数的具体用法,若一个函数有四五个参数,一次性传入这么多参数,难免让人看得眼花缭乱,若使用key=value 的方式传入

def other(a,b=5):

    for i in range(b):
print(i,"-",a) other(a=111,b=3)
--------------------
0 - 111
1 - 111
2 - 111

但不能同时使用两种方式,要么直接使用参数,要么使用关键词参数

特殊函数

默认情况下,函数的参数传递形式可以是位置参数或是显式的关键字参数


def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):
----------- ---------- ----------
| | |
| Positional or keyword |
| - Keyword only
-- Positional only

通过 /* 来确定函数的传递方式

/ 后方的参数既可以用位置参数 或者是 关键词参数

/ 前方的参数必须是位置参数

* 后方的参数只能使用关键字参数


# 基本形式
def standard_arg(a):
print(a) # 仅限位置
def pos_only_arg(a,/):
print(a)
# 仅限关键字参数
def kwd_only_arg(*,a):
print(a) def combined_example(pos_only, /, standard, *, kwd_only):
print(pos_only, standard, kwd_only)
  • 基本形式:可以传递任意形式
standard_arg('hello')
standard_arg(a ='hello')
-----------------------
hello
hello
  • 仅限位置参数
pos_only_arg('world')
#以下形式会报错
#pos_only_arg(a='world')
  • 仅限关键字参数
kwd_only_arg(a='python')
# 以下形式会报错,不可使用
#kwd_only_arg('python')
  • 双重形式
combined_example('hello',standard='world',kwd_only='python')

combined_example('hello','world',kwd_only='python')
---------------------- hello world python
hello world python

这里注意其 /* 所在的位置传递参数即可

Lambda 表达式

Lambda函数可以在需要函数对象的任何地方使用。它们在语法上限于单个表达式。从语义上来说,它们只是正常函数定义的语法糖。与嵌套函数定义一样,lambda函数可以引用所包含域的变量:

def create_fun(n):

    return lambda x:x+n

f = create_fun(50)

print(f(1))
------------------
51

简单的解释一下:我们通过定义一个函数create_fun 需要传入一个n 的参数,而后我们通过return 关键字返回一个 lambda 匿名函数,这个匿名函数需要传入一个x作为参数,在匿名函数的函数体内,将外层函数传入的n与匿名函数自己的参数x 做一个相加。

f = create_fun(50) 已经创建了一个匿名函数,并且赋值给 f,现在 f 就是一个匿名函数,可以传参,通过f(1) 调用匿名函数后,1其实就是匿名函数的参数 x, 做一个相加后,则返回的就是 51

小结

通过本节的学习,我们已经了解到有关代码流程的控制、通过 if-elif-else 在不同的条件下执行不同的代码。两种不同的循环方式 for / while 以及如何定义一个函数,包括函数的返回值以及给函数传入参数的时候,需要注意的传参方式,位置传参以及key=value 形式传参。

PYTHON 学习笔记2 流程控制工具以及函数定义、匿名函数的更多相关文章

  1. Python学习笔记 - day4 - 流程控制

    Python流程控制 Python中的流程控制主要包含两部分:条件判断和循环. Python的缩进和语法 为什么要在这里说缩进和语法,是因为将要学习的条件判断和分支将会涉及到多行代码,在java.c等 ...

  2. Python学习笔记:流程控制

    单分支: if 条件: 满足条件后执行的代码 程序举例: leiyu=28if leiyu > 22: print("You can find girl friend..." ...

  3. python学习笔记(五):装饰器、生成器、内置函数、json

    一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如说,我以前写了很多代码,系统已经上线了,但是性能比较不好,现在想把程序里 ...

  4. 【原】Java学习笔记005 - 流程控制

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 程序的流程控制(流 ...

  5. C#学习笔记_04_流程控制

    04_流程控制 程序的执行结构: 顺序结构 分支结构 循环结构 可以通过某些特定的控制语句来控制代码的执行结构 分支流程控制 if else 基本语法 可以只有if没有else,但是不能没有if只有e ...

  6. JavaSE学习笔记03流程控制

    Java流程控制 1.顺序结构 java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句往下执行. 顺序结构是最简单的算法结构,它是任何一个算法都离不开的一种基本算法结构. 2. 选择结构 ...

  7. Java学习笔记五——流程控制

    分支结构 Java提供了两种常见的分支控制结构:if语句和switch语句. if语句 if语句使用布尔值或布尔表达式(表达式结果为布尔值),if语句有3中形式: 第一种形式: if (5 > ...

  8. 【原】Java学习笔记007 - 流程控制

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // for循环 // ...

  9. 【原】Java学习笔记006 - 流程控制

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:写一万次&q ...

随机推荐

  1. eclipse中使用postgreSQL报错( Cannot load JDBC driver class )

    需求: 使用Maven插件调用PostgreSQL数据库 环境: eclipse_4.5.0+JDK_1.7+Tomcat_7.0+Maven+postgresql-9.1-901.jdbc4.jar ...

  2. Go 每日一库之 flag

    缘起 我一直在想,有什么方式可以让人比较轻易地保持每日学习,持续输出的状态.写博客是一种方式,但不是每天都有想写的,值得写的东西. 有时候一个技术比较复杂,写博客的时候经常会写着写着发现自己的理解有偏 ...

  3. 【Java并发基础】并发编程领域的三个问题:分工、同步和互斥

    前言 可以将Java并发编程抽象为三个核心问题:分工.同步和互斥. 这三个问题的产生源自对性能的需求.最初时,为提高计算机的效率,当IO在等待时不让CPU空闲,于是就出现了分时操作系统也就出现了并发. ...

  4. ubuntu pycharm、idea创建快捷方式

    编辑/usr/share/application/pycharm.desktop [Desktop Entry] Type=Application Name=Pycharm GenericName=P ...

  5. 小程序的<label>标签

    用来改进表单组件的可用性. 使用for属性找到对应的id,或者将控件放在该标签下,当点击时,就会触发对应的控件. for优先级高于内部控件,内部有多个控件的时候默认触发第一个控件. 目前可以绑定的控件 ...

  6. 继承Exception⭐⭐

    public class ECOrderException : Exception { //第一种类型: throw new ECOrderException { ErrorCode = " ...

  7. Nginx在Centos 7中配置开机启动

    1.创建脚本 # vi /etc/init.d/nginx #!/bin/bash # nginx Startup script for the Nginx HTTP Server # it is v ...

  8. [bzoj2668] [洛谷P3159] [cqoi2012] 交换棋子

    Description 有一个n行m列的黑白棋盘,你每次可以交换两个相邻格子(相邻是指有公共边或公共顶点)中的棋子,最终达到目标状态.要求第i行第j列的格子只能参与mi,j次交换. Input 第一行 ...

  9. ls命名 | Linux统计文件夹内的文件个数

    ls命名 man ls -R 递归列出全部的目录内容 recusive -a 列出所有的文件(包括以 . 开头的隐藏文件) all -r 逆序排列 reverse -t 按照时间信息排序 time - ...

  10. DOM中的位置和大小(总结)

    [window]window对象 一.position位置 screenLeft/screenTop (适用于火狐和谷歌) screenX/screenY (适用于IE) 二.size大小 inner ...