学习Python Day9 —— 推导式和函数

学习Python Day9 —— 推导式和函数

推导式

推导式是用来快速方便的产生列表或者字典的表达式

1.列表推导式

1)基本结构

[表达式 for 变量 in 序列]

产生一个新的列表,列表中的元素就是每次循环对应的表达式的结果

list1 = [10 for x in range(3)]
print(list1)    # [10, 10, 10]

list2 = [2*x for x in range(1, 4)]
print(list2)    # [2, 4, 6]

# 练习1:写一个列表推导式,产生一个列表中的元素满足以下规律:str0,str3,str9,...str99
list3 = ["str%s" % x for x in range(0, 100, 3)]
print(list3)
2)条件结构

列表 = [表达式 for变量 in 序列 if 条件语句]

list4 = [x for x in range(10) if x % 2]
print(list4)    # [1, 3, 5, 7, 9]

list5 = [x for x in range(10) if x % 2 == 0]
print(list5)    # [0, 2, 4, 6, 8]

# 练习2:写一个列表推导式,产生一个列表中的元素满足以下规律:str1,str3,str9,...str99
list6 = ["str%s" % x for x in range(1, 100) if x % 3 == 0 or x == 1]
list7 = [f"str{x}" for x in range(1, 100) if x % 3 == 0 or x == 1]
print(list6, list7)
# 方法2
list8 = ["str1" if x == 0 else "str%s" % x for x in range(0, 100, 3)]
print(list8)

多重循环结构:

列表 = [表达式 for 变量1 in 序列1 for 变量2 in 序列2]

相当于:

列表 = []

for 变量1 in 序列1:

​ for 变量2 in 序列2:

​ 列表.append(表达式)

list9 = ["%s%s" % (x, y) for x in range(3) for y in "abc"]
print(list9)

2.集合推导式

集合推导式与列表推导式一样,只需要将[ ]变为{ }。

3.元组和字典推导式

元组推导式 - 将列表推导式的[ ]变成tuple( )

字典推导式 - (表达式是有且只有两个元素的序列的时候)将列表推导式的[ ]变成dict( );(表达式是键值对形式)将列表推导式的[ ]变成( )

# 练习3:通过字典推导式交换一个字典的键和值
dic = {
    
    "a": 10, "b": 20, "c": 30}
dic1 = {
    
    dic[x]: x for x in dic}
print(dic1)     # dic2 =  {10: 'a', 20: 'b', 30: 'c', 'd': [10, 20]}

# 练习4:通过字典推导式交换一个字典的键和值,如果值是可变的在新的字典中不交换
dic = {
    
    "a": 10, "b": 20, "c": 30, "d": [10, 20]}
dic2 = dict((key, dic[key]) if type(dic[key]) in (list, set, dict) else (dic[key], key) for key in dic)
print("dic2 = ", dic2)      # dic2 =  {10: 'a', 20: 'b', 30: 'c', 'd': [10, 20]}

函数的基础

函数就是对实现某一特定功能的代码的封装。

函数的分类:

系统函数:Python中已经定义好,程序员可以直接使用的函数。

自定义函数:有程序员自己定义,程序员可以自己使用或者给别人使用的函数。

语法:
def 函数名(形参列表):
函数说明文档
函数体

说明:

  1. def - 关键字;固定写法
  2. 函数名 - 程序员自己命名;
    要求:标识符、不能是关键字
    规范:字母小写,单词之间用_隔开;
    见名知意
    不使用系统的函数名、类名和模块名
  3. (): - 固定写法(不能省略)
  4. 形参列表 - 以"变量名1,变量名2,变量名3,…"的形式存在;
    形参的作用是将函数外部的数据传递到函数里面(如果实现函数的功能需要
    提供外部数据,那么这个函数就需要形参)
  5. 函数说明文档 - 函数的说明书;本质就是用三个""""""引起来的注释
  6. 函数体 - 和def保持一个缩进的一条语句或者多条语句。
    实现函数功能的代码块
# 示例1.定义一个函数求任意两个数字的和


def sum1(num1, num2):
    """
    两数求和
    :param num1: 第一个数
    :param num2: 第二个数
    :return: None
    """
    print(num1 + num2)


sum1(2, 3)
# 练习1:定义一个函数,求一个数的阶乘


def factorial(num):
    result = 1
    if num > 0:
        for i in range(1, num+1):
            result *= i
        print(result)
    else:
        print("请输入一个正整数!")


factorial(5)
# 练习2:写一个函数讲个字符串交叉合并
# "abc"、"123" -> a1b2c3


def sum_str(str1, str2):
    a = ""
    len1 = len(str1)
    len2 = len(str2)
    if len1 <= len2:
        for i in range(len1):
            a += str1[i] + str2[i]
        a += str2[len1:]
        print(a)
    else:
        for j in range(len2):
            a += str1[j] + str2[j]
        a += str1[len2:]
        print(a)

sum_str("abcdef", "123")

# 方法二
def merge(str1, str2):
    len1 = len(str1)
    len2 = len(str2)
    new_str = ""
    for index in range(min(len1, len2)):
        new_str += str1[index] + str2[index]
    if len1 > len2:
        new_str += str1[len2:]
    else:
        new_str += str2[len1:]
    print(new_str)

merge("abc", "123456")
调用函数

语法:
函数名(实参列表)

说明:
函数名 - 需要使用的已经定义好的函数的函数名
( ) - 固定写法
实参列表 - 以"数据1, 数据2, 数据3,…"的形式存在
实参就是需要从外部传递到函数内部使用的具体的数据

函数的参数

1.位置参数和关键字参数

根据实参的传递方式将实参分为位置参数和关键字参数两种

1)位置参数
以"实参1, 实参2, 实参3,…"的形式存在,让实参和形参一一对应

2)关键字参数
以"形参1=实参1, 形参2=实参2,…"的形式存在,这个参数的为止可以随意更改

3)位置参数和关键字参数混用
位置参数必须在关键字参数前面

def func1(a, b, c):
    print(f"a:{a},b:{b},c:{c}")

# 位置参数
func1(10, 20, 30)       # a:10,b:20,c:30
func1(30, 20, 10)       # a:30,b:20,c:10

# 关键字参数
func1(a=100, b=200, c=300)  # a:100,b:200,c:300
func1(b=200, c=300, a=100)  # a:100,b:200,c:300

# 混用
func1(10, 20, c=30)     # a:10,b:20,c:30
func1(100, c=230, b=220)    # a:100,b:220,c:230
2.参数默认值

定义函数的时候可以直接给一个或者多个形参赋默认值;有默认值的参数在调用的时候可以不传参。

def func2(a=1, b=2, c=3):
    print(f"a:{a},b:{b},c:{c}")

func2()         # a:1,b:2,c:3
func2(10, 20)   # a:10,b:20,c:3
func2(b=200)    # a:1,b:200,c:3

# 有默认值的参数必须在没有默认值参数的后面
def func3(a, b, c=3):
    print(f"a:{a},b:{b},c:{c}")

func3(100, 200)     # a:100,b:200,c:3
func3(100, 200, 300)    # a:100,b:200,c:300
3.不定长参数

定义函数的时候如果参数个数不确定,可以使用不定长参数
1)带*的不定长参数

在形参前加*让这个形参变成不定场参数,可以同时接收多个实参。
这个参数的本质就是一个元组,传递的对应的实参全部会变成这个元组中的元素。(必须使用位置参数)

2)带**的不定长参数

在形参前加**让这个形参变成不定场参数,可以同时接收多个实参。
这个参数的本质就是一个字典(必须使用关键字参数传参,关键字自己随意命名)。

# 定义一个函数,求多个数的平均值
def mean(*num):
    if len(num) == 0:
        print("0")
    else:
        print(sum(num)/len(num))

mean(10, 20, 30)

def func6(x, *args):
    print(f"x:{x},a:{args}")


def func7(**num):
    print(num)

func7(a=100)
func7(name="张三", age=18)

猜你喜欢

转载自blog.csdn.net/zhaoxin0917/article/details/108997203
今日推荐