python第九天

# 推导式是用来快速方便的产生列表或者字典的表达式
# 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,str6,str9,...,str99
list3 = ['str'+str(x*3) for x in range(0, 34)]
print(list3)
'''
2)条件结构
[表达式 for 变量 in 序列 if 条件语句]
'''
# 练习:写一个列表推导式,产生一个列表中的元素满足以下规律:str1,str3,str6,str9,...,str99
# 方法一
list4 = ['str'+str(x) for x in range(1, 100) if x == 1 or x % 3 == 0]
print(list4)
# 方法二
list5 = ['str1' if x == 0 else f'str{x}' for x in range(0, 100, 3)]
print(list5)
# 2.集合推导式
# 将列表推导式的[]变成{}

# 3.元组和集合推导式
# 元组 - 将列表推导式的[]变成tuple()

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

# 练习3:通过字典推导式交换一个字典的键和值
# dic = {'a': 10, 'b': 20, 'c': 30}  -> {10: 'a', 20: 'b', 30: 'c'}
dic = {'a': 10, 'b': 20, 'c': 30}
dic = {dic[x]: x for x in dic}
print(dic)
# 练习4:通过字典推导式交换一个字典的键和值,如果值是可变的在新的字典中不交换
dic4 = {'a': 10, 'b': 20, 'c': 30, 'd': [10, 20]}
dic4 = dict((x, dic4[x])if type(dic4[x]) in (list, set, dict, tuple) else (dic4[x], x) for x in dic4)
print(dic4)
# 1.认识函数
'''
a.什么是函数
函数就是对实现某一特定功能的代码的封装。(机器)

b.函数的分类(谁定义的函数)
系统函数:python已经定义好,程序员可以直接使用的函数。例如:print、input、type、chr、ord、id、max、min、sum、sored等(别人已经造好的机器)
自定义函数:由程序员自己定义,程序员可以自己使用或者给别人使用的函数。(自己造机器)
'''
# 2.定义函数(造机器)
"""
语法:
def 函数名(形参列表):
    函数说明文档
    函数体

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


# 示例1:定义一个函数求任意两个数字的和
def sum1(num1, num2):

    print(num1 + num2)


sum1(10, 35)
# 练习1:定义一个函数,求一个数的阶乘:N! = 1*2*3*4*...*N


def factorial(num):
    s = 1
    for x in range(1, num+1):
        s *= x
    print(f'{num}的阶乘是:{s}')
# 练习2:写一个函数将两个字符串交叉合并
# 'abc'、'123' -> a1b2c3
# 'abc'、'12345'  -> a1b2c345
# 'abcdef'、'123' -> a1b2c3def


def he_bin(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)


he_bin('asdhkj', '1234')

# 3.调用函数(使用机器)
"""
语法:
函数名(实参列表)

说明:
函数名    -   需要使用的已经定义好的函数的函数名
()        -  固定写法
实参列表   -    以'数据1,数据2,数据3,...' 的形式存在;
                实参就是需要从函数外部传递到函数内部使用的具体的数据  
"""
# 1.位置参数和关键字参数
# 根据实参的传递方式将实参分为位置参数和关键字参数两种
"""
1)位置参数
以'数据1, 数据2, 数据3,...'形式存在,让实参和形参一一对应

2)关键字参数
以'形参1=实参1,形参2=实参2,...'形式存在,这个参数的位置可以随意更改

3)位置参数和关键字参数混用
位置参数必须在关键字参数的前面
"""
# 2.参数默认值
"""
定义函数的时候可以给一个或者多个形参赋默认值;有默认值的参数在调用的时候可以不传参。
"""
# 有默认值的参数必须在没有默认值参数的后面
# 3.不定长参数
"""
定义函数的时候如果参数个数不确定,可以使用不定长参数

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

2)带**的不定长参数
在形参的前面加**让这个形参变成不定长参数,可以同时接受多个实参。这个参数的本质就是一个字典(必须使用关键字参数传参,关键字自己随意命名)
"""
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值