18

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

 4 years ago
source link: https://blogs.chaobei.xyz/archives/python2
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

前言

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK