Python学习(五):控制语句和函数

85 阅读3分钟

1.控制语句

1.1 条件控制:if..else

# 判断年龄
def checkAge(age):
    if age > 30:
        return "您老了~"
    else:
        return "正年轻~"

if __name__ == "__main__":
    print("age = 20", checkAge(20))
    print("age = 40", checkAge(40))
       
# age = 20 正年轻~
# age = 40 您老了~

1.2 条件控制:if..elif..else

def checkScore(score):
    if score > 90:
        return "优秀"
    elif score >= 70:
        return "良"
    elif score >= 60:
        return "及格"
    else:
        return "差"


if __name__ == "__main__":
    print("score = 95", checkScore(95))
    print("score = 80", checkScore(80))
    print("score = 65", checkScore(65))
    print("score = 43", checkScore(43))
   
# score = 95 优秀
# score = 80 良
# score = 65 及格
# score = 43 差

@注意点: python中没有switch...case

1.3 循环控制: for | while

if __name__ == "__main__":
    language = ["Java", "Php", "Go", "Python"]
    # 使用for
    for n in language:
        print("for:", n)

    # 使用while
    index = 0
    while index < len(language):
        print("while:", language[index])
        index = index + 1
        
# for: Java
# for: Php
# for: Go
# for: Python
# while: Java
# while: Php
# while: Go
# while: Python        

2. 函数入门

2.1 定义

Python中,函数定义必须以def关键词开始.

# arg1、arg2代表参数
def func_name(arg1,arg2)
  """ 函数说明文档 """
  # TODO 
  return x

2.2 调用

## ---- basis/func_demo.py ---- ##
def getSumList(list_num):
    """ 把列表中的所有元素相加 """
    sumTotal = 0
    for n in list_num:
        sumTotal = sumTotal + n
    return sumTotal
# -----------------

###  当前main包函数  ###
def sumList(list_num):
    """ 把列表中的所有元素相加 """
    sumTotal = 0
    for n in list_num:
        sumTotal = sumTotal + n
    return sumTotal


if __name__ == "__main__":
    list_var = [10, 20, 30, 40, 50, 60, 70, 80]
    # 调用basis包里的函数
    print("func_demo.getSumList:", func_demo.getSumList(list_var))
    # 调用当前包函数
    print("main.sumList:", sumList(list_var))
    # 调用内置函数
    print("sum:", sum(list_var))
    # 打印函数说明
    print("getSumList函数说明:", func_demo.getSumList.__doc__)
    
## 输出
# func_demo.getSumList: 360
# main.sumList: 360
# sum: 360
# getSumList函数说明:  把列表中的所有元素相加 

3. 参数分类

3.1 可变&不可变类型

Python语言的数据类型有不可变类型和可变类型两种,因此参数也分可变类型和不可变类型;

  • 不可变类型:数值类型、字节串类型、元组类型;
  • 可变类型:列表类型、字典类型

对不可变类型参数的传递采用:值传递;   对于可变类型参数的传递采用: 地址传递

当使用可变参数类型传递时,要特别注意:函数内对变量的修改,也会影响到函数外的实参。

3.2 区别演示

def argDemo(str, list_var):
    """ 演示可变类型和不可变类型作为参数的区分 """
    # 修改字符串(不可变类型)
    str = "hello"
    # 修改列表
    list_var[0] = "hello"


if __name__ == "__main__":
    name = "张三"
    names = ["张三", "李四"]
    print("调用函数前: name:{} names:{}".format(name, names))
    argDemo(name, names)
    print("调用函数后: name:{} names:{}".format(name, names))
    
# 调用函数前: name:张三 names:['张三', '李四']
# 调用函数后: name:张三 names:['hello', '李四']    

4. 参数传递

4.1 默认参数

def defaultArgDemo(name, age=18):
    """
    默认参数演示使用
    :param name:
    :param age:
    :return:
    """
    res = "姓名:{} 年龄:{}".format(name, age)
    return res

if __name__ == "__main__":
    print("当不传age时: ", defaultArgDemo("张三"))
    print("当传age时: ", defaultArgDemo("李四", 22))
    
# 当不传age时:  姓名:张三 年龄:18
# 当传age时:  姓名:李四 年龄:22

4.2 关键字参数

一般我们调用函数时,但是按照函数的形参的顺序传递参数(也就是位置参数),除此之外我们还可以通过关键字传参,如下示例:

def funcDemo(name, age, home):
    """
    :param name:
    :param age:
    :param home:
    :return:
    """
    res = "姓名:{} 年龄:{} 地址:{}".format(name, age, home)
    return res


if __name__ == "__main__":
    print("关键字参数演示A: ", funcDemo(age=20, name="张三", home="北京"))
    print("关键字参数演示B: ", funcDemo(home="南京", name="李四", age=39))

# 关键字参数演示A:  姓名:张三 年龄:20 地址:北京
# 关键字参数演示B:  姓名:李四 年龄:39 地址:南京    

@注:关键字参数传参,和顺序没有关系

4.3 变长参数

4.3.1 以一个*开始

def funcDemo(*args):
    """
    以* 开始的变长参数
    :param args:
    :return:
    """
    res = "接收结果:{} 类型:{}".format(args, type(args))
    return res

if __name__ == "__main__":
    # 传字符串、数字
    print("变长参数A: ", funcDemo("张三", 10))
    # 传字符串、数字、列表
    print("变长参数B: ", funcDemo("张三", 10, ["篮球", "游戏"]))
    
# 变长参数A:  接收结果:('张三', 10) 类型:<class 'tuple'>
# 变长参数B:  接收结果:('张三', 10, ['篮球', '游戏']) 类型:<class 'tuple'>  

@注: 以一个*开始的变长参数,接受到数据会变成元组类型,并且在一个函数定义中,最多只能有一个这样的参数。

4.3.2 以两个*开始

def funcDemo(**args):
    """
    以 ** 开始的变长参数
    :param args:
    :return:
    """
    res = "接收:{}  类型:{}".format(args, type(args))
    return res

if __name__ == "__main__":
    print("运行结果A> ", funcDemo(name="张三", home="北京"))
    print("运行结果B> ", funcDemo(name="李四", likes=["动漫", "游戏"]))
    
# 运行结果A>  接收:{'name': '张三', 'home': '北京'}  类型:<class 'dict'>
# 运行结果B>  接收:{'name': '李四', 'likes': ['动漫', '游戏']}  类型:<class 'dict'>   

@注: 以两个*开始的变长参数,接受到数据会变成字典类型,并且在一个函数定义中,最多只能有一个这样的参数。

5.匿名函数

Python使用关键字lambda来创建匿名函数,匿名函数主体是一个表达式,而不是一个代码块,所以能实现的业务逻辑非常有限。

if __name__ == "__main__":
    # 定义匿名函数
    addFunc = lambda a, b: a + b
    # 使用
    print("3 + 3 = ", addFunc(3, 3))
    print("5 + 5 = ", addFunc(5, 5))

    # 结合map遍历每个元素,并乘以10
    numbers = [1, 2, 3]
    res = map(lambda x: x * 10, numbers)
    print("res = ", list(res)) 
    
# 3 + 3 =  6
# 5 + 5 =  10
# res =  [10, 20, 30]

本文由mdnice多平台发布