前言

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

  • 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. ConcurrentHashMap源码解析 JDK8

    一.简介 上篇文章详细介绍了HashMap的源码及原理,本文趁热打铁继续分析ConcurrentHashMap的原理. 首先在看本文之前,希望对HashMap有一个详细的了解.不然看直接看Concur ...

  2. Lambda表达式(lambda expression)⭐⭐⭐⭐⭐

    原作者 lambda表达式(lambda expression)实际上是匿名函数一种表示形式, 即没有函数名的函数:参数列表=>表达式或语句块,在我看来主要目是为了简化代码编写,提高代码可读性而 ...

  3. crawler 听课笔记 碎碎念 2 一些爬虫须知的基本常识和流程

    html的宗旨:      <标签 属性=”属性的值“></标签>        只是对于文本的一种解释划分吧 dom的宗旨:      就是一个大数组,处理方便,效率低 xm ...

  4. NumPy排序

    numpy.sort()函数 该函数提供了多种排序功能,支持归并排序,堆排序,快速排序等多种排序算法 使用numpy.sort()方法的格式为: numpy.sort(a,axis,kind,orde ...

  5. IDEA新建maven项目没有webapp目录解决方法

    转载地址:https://www.cnblogs.com/oldzhang1222/p/10429827.html 先创建的页面修改路径 修改路径如下 添加并完善路径\src\main\webapp ...

  6. spring boot配置spring-data-jpa的时候报错CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.NoSuchMethodError

    org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager f ...

  7. python 抓一下 循环的访问也可以

    #!/usr/bin/python # -*- coding: utf-8 -*- #encoding=utf-8 #Filename:urllib2-header.py import urllib2 ...

  8. Windows中安装Linux子系统的详细步骤

    早就听说Windows中可以安装Linux子系统,体验了一下,感觉还是不错的,下面直接开始安装和配置步骤吧! 开启Windows中的配置 首先开启开发者模式 打开"所有设置"进入& ...

  9. c#数字图像处理(三)灰度直方图

    灰度直方图是灰度的函数,描述的是图像中具有该灰度级的像素的个数.如果用直角坐标系来表示,则它的横坐标是灰度级,纵坐标是该灰度出现的概率(像素的个数). using System; using Syst ...

  10. 'NoneType' object has no attribute shape

    使用cv2读取图片时,输出图片形状大小时出现报错“ 'NoneType' object has no attribute shape”,后来排查发现读取图片的返回值image为None, 这就说明图片 ...