day09-推导式和函数

推导式

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

1.列表推导式

1)基本结构
[表达式 for 变量 in 序列]

产生一个新的列表,列表中的元素就是每次循环对应的表达式的结果
相当于:
列表 = []
for 变量 in 序列:
列表.append(表达式)

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

练习:产生一个列表推导式,满足一下规律,str1,str3,str6…str99

list2 = [f'str{x}'for x in range(0, 100, 3)]

print(list2)

#2)条件结构

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

相当于:
列表 = []
for 变量 in 序列:
if 条件语句:
列表.append(表达式)

list3 = [f'str{x}' for x in range(1, 100) if x % 3 == 0 or x == 1]
print(list3)
方法2

list4 = [‘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(表达式)

list5 = {f’{x}{y}’ for x in range(3) for y in ‘abc’}
print(list5)

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

a1 = {x for x in ‘hello’}

3.元祖和字典推导式
元祖 - 将列表推导式[]变成tuple()
字典 - (表达式是键值对形式)将列表推导式的[] 变成 {}, (表达式是有且只有两个元素的序列的时候)将[]变成dict()
a2 = tuple(x*2 for x in 'hello')
a3 = {x: x*2 for x in 'hello'}
a4 = dict((x, x*3) for x in 'hello')

练习:通过字典推导式交换一个字典的键值

dic = {'a': 10, 'b': 20, 'c': 30}
a5 = {dic.get(x): x for x in dic}
print(a5)
print(type(a5))
dic2 = dict((key, dic[key]) if type(dic[key]) in (list, set, dict)else (dic[key], key) for key in dic)
print(dic2)

函数

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

b.函数的分类(谁定义的函数)
系统函数:python已经定义好的,直接使用的函数
自定义函数:自己定义,可以给他们或者别人使用

2.定义函数

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

说明:
1)def - 关键字
2)函数名 - 自己决定的 要求:标识符,不能是关键字,见名知意,不使用系统的类型名和模块
3)(): - 固定写法(不可省略)
4)形象列表 - 以’变量名1,变量名2,变量名3…‘的形式存储
形参的作用是将函数外部的数据传递到函数里面(如果实现函数的功能需要提供外部数据,那么该函数就需要形参)
5)函数说明文档 - 函数的说明书,本质就是文本注释,必须用""""""
6)函数体 - 和def保持一个缩进的一条或者多条语句(至少一条)
重点注意:定义函数的时候不会执行函数体

定义一个函数求任意两个数字的和
def sum1(num1, num2):
求两个数字的和 - 函数功能说明区
param num1: - 参数说明区
param num2: - 参数说明区
return: - 返回值说明
print(num1 + num2)

定义一个函数,求一个数的阶乘

def jie_cheng(num1):
    """
    这是求阶乘的函数
    :param num1:
    :return:
    """
    result1 = 1
    for x in range(1, num1+1):
        result1 *= x
    print(result1)

jie_cheng(5)

练习:写一个函数,将两个字符串交叉合并

str1 = 'avff'
str2 = '524'
def jiao_cha(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)
调用函数

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

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

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

根据实参的传递方式将实参分为以上两种

1)位置参数
以’实参1,实参2,实参3…‘形式存在,让实参和形参一一对应
2)关键字参数
以’形参1=实参1,形参2=实参2,形参3=实参3…‘形式存在,这个参数的位置可以随意更改
3)位置参数和关键字参数混用
位置参数必须在关键字参数的前面

位置参数
def func1(a, b, c):
    print(f'a:{a},b:{b},c:{c}')


func1(10, 20, 30)
关键字参数

func1(a=100, b=200, c=300)

混用

func1(10, 20, c=30)
func1(10, c=230, b=200)

参数默认值

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

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


func2()
func2(10, 20)
func2(b=200)


def func3(a, b, c=3):
    print(f'a:{a}, b:{b}, c:{c}')


func3(100, 200)
有默认值的参数必须在没有默认值参数的后边

3.不定长参数

定义函数的时候,如果参数个数不确定,可以使用不定长参数
1)带的不定长参数
在形参的前面加
,让形参变成不定长参数,可以同时接受多个实参,这个参数的本质就是一个元祖,传递对应的实参全部会变成元祖的元素
(必须使用位置参数传参)
2)带的不定长参数
在形参前加
,让这个形参变成不定长参数,可以接受多个实参,这个参数的本质是一个字典
(必须使用关键字参数传参),关键字自己随意命名

定义一个函数,求多个数的平均值

def avg(*num):
    if len(num) == 0:
        print('0')
    else:
        print(sum(num) / len(num))


avg(10)
avg(10, 20, 30)
这的x必须用关键字参数传参

def func4(*a, x):
print(‘a:’, a, ‘x:’, x)

这的x必须用位置参数传参
def func5(x, *a):
    print('x:', x, 'a:', a)


def func6(**num):
    print(num)


func6()
func6(a=100)
func6(name='zhang', age=30)    # {'name': 'zhang', 'age': 30}
func(*args, **kwargs) 中 *args, **kwargs的意义
让函数调用的时候更加灵活
def func(*args, **kwargs):
    pass
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值