前言

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

  • 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. VMware下Hadoop 2.4.1完全分布式集群平台安装与设置

    1 VM下Ubuntu安装和配置 1.1 安装Ubuntu系统  这个就不说了,不知道的可以去看看其他的博文.   1.2 集群配置     搭建一个由3台机器组成的集群: IP user/passw ...

  2. 两个关于 Java 面试的 Github 项目

    哈喽,大家好.相信大家都知道金九银十,在人才市场上是指每年的 9 月和 10 月是企业的招聘高峰期.这个时候企业往往有大量招聘需求,求职者在这个时候就找工作无疑是最适合的.需求大,谈工资什么的就更容易 ...

  3. 《C# 爬虫 破境之道》:第一境 爬虫原理 — 第四节:同步与异步请求方式

    前两节,我们对WebRequest和WebResponse这两个类做了介绍,但两者还相对独立.本节,我们来说说如何将两者结合起来,方式有哪些,有什么不同. 1.4.1 说结合,无非就是我们如何发送一个 ...

  4. 【WPF学习】第十三章 理解路由事件

    每个.NET开发人员都熟悉“事件”的思想——当有意义的事情发生时,由对象(如WPF元素)发送的用于通知代码的消息.WPF通过事件路由(event routing)的概念增强了.NET事件模型.事件路由 ...

  5. c#数字图像处理(十三)图像开运算与闭运算

    图像开运算与闭运算定义 二值图像开运算的数学表达式为: g(x, y)=open[f(x, y ), B]=dilate{erode[f(x, y),B],B} 二值图像的开运算事实上就是先作腐蚀运算 ...

  6. K8S生产环境中实践高可靠的配置和技巧都有哪些?

    K8S环境中实践高可靠的配置和技巧都有哪些? 磁盘类型及大小 磁盘类型: 推荐使用ssd 磁盘 对于worker节点,创建集群时推荐使用挂载数据盘.这个盘是专门给/var/lib/docker 存放本 ...

  7. (笔记)常用Llinu命令(一)

    Linux资源 鸟哥Linux:http://linux.vbird.org/linux_basic/ Linux命令大全:https://man.linuxde.net/ 目录切换 cd usr: ...

  8. 什么是 Trait

    Trait 是从 PHP 5.4 加入的一种细粒度代码复用的语法.以下是官方手册对 Trait 的描述: Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制.Trait 为了减少单继承 ...

  9. Shrio | java.io.IOException: Resource [classpath:shiro.ini] could not be found

    案例 今天项目启动时一直报异常,看了错误日志发现是shrio文件找不到引起的,异常: java.io.IOException: Resource [classpath:shiro.ini] could ...

  10. 微信小程序 客户端时间 与 服务端时间

    服务端时间 db.serverDate(); 在操作数据库,上传数据的时候可以使用服务端时间 wx.cloud.init();//初始化云 const db = wx.cloud.database() ...