• PYTHON 学习笔记2 流程控制工具以及函数定义、匿名函数


    前言

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

    • 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 形式传参。

  • 相关阅读:
    原笔迹手写实现平滑和笔锋效果之:笔迹的平滑(二)
    区块链入门(4)Truffle创建项目,编译,及项目部署
    github的基本使用
    ES6新特性之傻瓜式说明
    webpack之傻瓜式教程及前端自动化入门
    查找树莓派ip地址的常用方法
    树莓派的无屏幕安装的教程
    采用QHD分辨率使用kinect2_calibration,完成QHD图像校正
    编译ORBSLAM2 build_ros.sh,实现kinect2在ROS环境下运行ORBSLAM2
    重写kinect2_viewer,编译高博kinect2在orbslam2上跑的程序(解决cmakefile中库依赖和头文件的问题)
  • 原文地址:https://www.cnblogs.com/ChromeT/p/12344860.html
Copyright © 2020-2023  润新知