Day9-推导式和函数

Day9-推导式和函数

01-推导式

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

  1. 列表推导式
"""
基本结构
列表  =  [表达式  for  变量  in  序列]
产生一个新的列表,列表中的元素就是每次循环对应的表达式的效果
相当于:
列表	=	[]
for  变量  in  序列:
		列表.append(表达式)
"""
list1 = [10 for x in range(3)]
print(list1)

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

练习1:写一个列表推导式,产生一个列表中的元素满足以下规律:str0,str3,str6,…,str99

# list3 = ['str'+str(x) for x in range(0, 100, 3)]
list3 = [f'str{x}' for x in range(0, 100, 3)]
print(list3)
"""
条件结构
[表达式 for 变量 in 序列 if 条件语句]

相当于:
列表 = []
for 变量 in 序列:
	if 条件语句:
		列表.append(表达式)
"""
list4 = [x for x in range(10) if x % 2]
print(list4)

练习2:写一个列表推导式,产生一个列表中的元素满足以下规律:str1,str3,str6,…,str99

# 方法一
list5 = [f'str{x}' for x in range(1,100) if x % 3 == 0 or x == 1]
# 方法二
list6 = ['str1' if x == 0 else f'str{x}' for x in range(0,100,3)]
"""
多重循环结构:
列表 = [表达式 for 变量1 in 序列1 for 变量2 in 序列2]

相当于:
for 变量1 in 序列 1:
    for 变量2 in 序列2:
        列表.append(表达式)
        
多重循环结构2:
列表 = [表达式 for 变量1 in 序列1 for 变量2 in 序列2 if 条件语句]

相当于:
for 变量1 in 序列 1:
    for 变量2 in 序列2:
        if 条件语句:
            列表.append(表达式)
"""
  1. 元组、集合和字典推导式

    集合推导式将列表推导式的[]变成{}

    a1 = {x for x in 'hello'}
    

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

    a2 = tuple(x for x in 'hello')
    

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

    ​ 将列表推导式的[]变成dict()

    a3 = {x: x*2 for x in 'hello'}
    
    a4 = dict((x, x*2) for x in 'hello')
    

    练习三:通过字典推导式交换一个字典的键和值,如果值是可变得在新的字典中不交换

    dic = {'a': 10, 'b': 20, 'c': 30, 'd': [10, 20]}
    dic1 = dict((x, dic[x]) if type(dic[x]) in (list, dict, set) else (dic[x], x) for x in dic)
    print(dic1)
    

02-函数基础

  1. 认识函数

    • 什么是函数

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

    • 函数的分类(谁定义的函数)

      • 系统函数

        python已经定义好。程序员可以直接使用的函数。

      • 自定义函数

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

  2. 定义函数

    • 语法

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

      """
      1) def  -   关键字;固定写法
      2)函数名      -   程序员自己命名
                      要求:标识符、不能是关键字
                      规范:字母小写,单词之间用_隔开;
                          见名知义(看到函数名大概知道函数的功能);
                          不能使用系统的函数名、类型名和模块名
      3) ():       -   固定写法(不能省略)
      
      4)形参列表    -     以'变量名1,变量2,变量3,...'的形式;
                          形参的作用是将函数外部的数据传递到函数里面(如果实现函数功能需要提供外部数据
                          那么这个函数就需要形参)
      
      5)函数说明文档    -   函数的说明书;本质就是文档注释""""""
      
      6)函数体   -   和def保持一个缩进的一条或者多条语句(至少一条)
                      实现函数功能的代码段
      """
      # 练习1:定义一个函数,求一个数的阶乘。
      def factorial(num):
          """
          求一个数的阶乘
          :param num: 提供一个正整数
          :return: None
          """
          count = 1
          for i in range(num, 1, -1):
              count *= i
          print(f'{num}的阶乘是{count}')
      
      
      factorial(5)
      
      
      # 练习2:写一个函数将两个字符串交叉合并
      def cross_merger(str1, str2):
          str3 = ''
          count = min(len(str1), len(str2))
          # 先交叉拼接相同长度的部分
          for i in range(count):
              str3 += str1[i] + str2[i]
          # 再确定尾部
          if len(str1) > len(str2):
              str3 += str1[count:]
          else:
              str3 += str2[count:]
          print(str3)
      
    • 注意:定义函数的时候不会执行函数体

  3. 调用函数(使用机器)

    • 语法

      函数名(实参列表)

    • 说明

      """
      函数名     -   需要使用的已经定义好的函数的函数名
      ()        -   固定写法
      实参列表    -   以'数据1,数据2,数据3,...'的形式存在 ;
                      实参就是需要从函数外部传递到函数内容使用的具体的数据(默认情况下被调用的函数
                      有多少个形参就需要提供多少个实参)
      """
      

03-函数的参数

  1. 位置参数和关键字参数:根据实参的传递方式将实参分为位置参数和关键字参数

    • 位置参数

      以’实参1,实参2,实参3,…'形式存在,让实参和形参一一对应

    • 关键字参数

      以’形参1 = 实参1,形参2=实参2,…'形式存在,这个参数的位置可以随意更改

    • 位置参数和关键字参数混用

      位置参数必须在关键字参数的前面

      def fun1(a, b, c):
          print(f'a:{a}, b:{b}, c:{c}')
      
      
      fun1(10, 20, 30)
      fun1(a=30, c=23, b=21)
      fun1(10, c=30, b=20)
      
  2. 默认值参数

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

    # 有默认值的参数必须在没有默认值参数的后面
    def fun2(a, b=2, c=3):
        print(f'a:{a}, b:{b}, c:{c}')
    
  3. 不定长参数:定义函数的时候如果参数的个数不确定,可以使用不定长参数

    • 带*的不定长参数

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

    • 带**的不定长参数

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

    # 定义一个函数,求多个数的平均值
    def mean(*num):
        if len(num) == 0:
            print('0')
        else:
            print(sum(num) / len(num))
    
    
    def fun3(*a, x):
        print('a:', a, 'x:', x)
    
    
    def fun4(x, *a):
        print('a:', a, 'x:', x)
    
    
    fun3(1, 2, 3, x=4)
    fun4(1, 2, 3, 4)
    
    
    def fun5(**num):
        print(num)
    
    
    def fun6(**num):
        print('num:', num)
    
    
    fun6(n=10, a=10, x=10)
    fun5()
    fun5(a=100)
    
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值