07:循环嵌套、函数的介绍、定义、参数以及参数拆包

以下内容仅做自己学习使用,知识点内容来自柠檬班,转载请标记来源

@Author:木又
@File:demo1_循环嵌套.py
@Time:2020/7/14 20:22
@Name:Ta Quan Ge

python 之禅:扁平胜于嵌套
print参数:end= 换行

while循环嵌套

# while True:
#     num = int(input("请输入数字:"))
#     n = 0
#     while n <= num:
#         print(n)
#         n += 1
*
**
***
****
*****
******


# 1.打印*号
# for i in range(1, 7):
#     print(f"{i}行")
#     for j in range(i):
#         print("* ", end="")    # print参数:end=  换行
#
#     print("")

2.打印乘法口诀表

for i in range(1, 10):
    for j in range(1, i + 1):
        print(f"{j}*{i}={j * i:<4}", end="")
    print()

=================================================================
@Author:木又
@File:demo2_函数的介绍.py
@Time:2020/7/14 20:52
@Name:Ta Quan Ge

函数:可以对重复使用的功能进行封装,提高代码的重复性,提高工作效率,降低代码的耦合性

def fun(n):
    for i in range(1, n + 1):
        for j in range(i):
            print("* ", end="")  # print参数:end=  换行
        print("")


fun(2)

=================================================================
@Author:木又
@File:demo3_函数的定义.py
@Time:2020/7/14 20:53
@Name:Ta Quan Ge

函数的定义: 关键字def
def 函数名字():
函数的功能代码

定义好的函数不会直接运行,需要调用时才会执行

函数名命名规范:
1.只能由数字、字母、下划线组成
2.不能使用数字开头
3.不能使用python中的关键字(内置函数、第三方库的名字)

函数命名风格:
推荐使用下划线命名法

已经学过的内置函数
print():输出
input(): 输入
id():获取数据的内存地址
type() 获取数据的类型

def fun(n):
    for i in range(1, n + 1):
        for j in range(i):
            print("* ", end="")  # print参数:end=  换行
        print("")

fun(9)     #调用函数,执行代码

=================================================================
@Author:木又
@File:demo4_函数的参数.py
@Time:2020/7/14 21:26
@Name:Ta Quan Ge

函数的参数:
定义函数的时候,可以在后面括号中定义参数

函数参数类型:
形参:定义的参数称为 形参
三种定义形式:
1.必须参数(必备参数):定义了就一定要传,不能多传也不能少传

2.默认参数(缺省参数):定义的时候可以设置默认值,调用的时候可以传,
也可以不传,不传的时候就使用默认值

3.不定长参数(动态\可变参数): 可以接受0个或者多个参数
*args:只能接收位置传参,以元组的形式保存
**kwargs: 只能接收关键字传参,以字典的形式保存

实参:调用实际传递的为 实参
两种定义形式 :
1.位置传参(位置参数):按照参数定义的位置进行传递
2.关键字参数(关键字参数):通过参数名字,指定传递

注意点:如果使用两种形式混合传递参数:先写位置参数,再写关键字参数,不然会报错

形参:
1.必须参数(必备参数):定义了就一定要传,不能多传也不能少传

def sum(a, b):
    print("a:", a)
    print("b:", b)
    print(a + b)


sum(1, 2)
sum(1, )    # TypeError: sum() missing 1 required positional argument: 'b'
sum(2, 1, 3)  # TypeError: sum() takes 2 positional arguments but 3 were given

2.默认参数(缺省参数):定义的时候可以设置默认值,调用的时候可以传,
也可以不传,不传的时候使用默认值

def sum(a, b=2):
    print("a:", a)
    print("b:", b)
    print(a + b)

sum(1)  #  不传的时候使用默认值

sum(1,4)

3.不定长参数(动态\可变参数): 可以接受0个或者多个参数

# *args:只能接收位置传参,以元组的形式保存

def sum(*args):
    print("arge:", args)


sum()  # 可不传
sum(1)  # 可传一个
sum(1, 4)  # 可传多个


sum(a=1)   # 只能接收位置传参,TypeError: sum() got an unexpected keyword argument 'a'

# **kwargs: 只能接收关键字传参,以字典的形式保存
def sum(**kwargs):
    print("kwargs", kwargs)


sum()  # 可不传
sum(a=1)  # 可传一个
sum(a=1, b=4)  # 可传多个

# 同时传 *args、 **kwargs
def sum(*args, **kwargs):
    print("args", args)
    print("kwargs", kwargs)


sum(1, 2, 3, a=1, b=4)  # 可传多个,注意位置参数在前,关键字参数在后,否则报错

实参:
1.位置传参(位置参数):按照参数定义的位置进行传递

def sum(a, b):
    print("a:", a)
    print("b:", b)
    print(a + b)


sum(1, 2)
sum(2, 1)

2.关键字参数(关键字参数):通过参数名字,指定传递

def sum(a, b):
    print("a:", a)
    print("b:", b)
    print(a + b)


sum(a=1, b=2)
sum(b=1, a=2)

3.注意点:如果使用两种形式混合传递参数:先写位置参数,再写关键字参数,不然会报错

def sum(a, b):
    print("a:", a)
    print("b:", b)
    print(a + b)


sum(a=1, 2)    #SyntaxError: positional argument follows keyword argument
sum(1, b=2)  # 先写位置参数,再写关键字参数

案例一:定义一个可以自定义打印三角形大小的函数

def fun(n):
    for i in range(1, n + 1):
        for j in range(i):
            print("* ", end="")  # print参数:end=  换行
        print("")

fun(9)
  1. 必须参数(必备参数)
def sum(a, b):
    print("a:", a)
    print("b:", b)
    print(a + b)


sum(1, 2)

================================================================
@Author:木又
@File:demo5_函数的参数拆包.py
@Time:2020/7/14 21:55
@Name:Ta Quan Ge

* : *加在形参前面(定义函数参数的时候使用),接收不定长位置参数,转换为元组
    *加在实参前面(调用函数参数的时候使用),可以将元组(列表)拆包成多个位置参数
    
****加在形参前面(定义函数参数的时候使用),接收不定长的关键字参数,转换为字典 
      **加在实参前面(调用函数参数的时候使用),可以将字典拆包成多个关键字参数


*args、 ** kwargs 是可以更改的,关键点在于前面的 (星 ※)

def sum(*a, **b):
    print("args", a)
    print("kwargs", b)

sum(1, 2, 3, a=1, b=4)

*加在实参前面(调用函数参数的时候使用),可以将元组(列表)拆包成多个位置参数

def sum(a, b, c, d):
    print(a, b, c, d)

tu = (1, 2, 34, 5)
li = [1, 2, 3, 4]
sum(*tu)
sum(*li)


def sum(a, b, c, d):
    print(a, b, c, d)


dic = {"a": 1, "b": 2, "c": 3, "d": 4}
li = [1, 2, 3, 4]
sum(**dic)


# sum(**li)   # 两个星不可以拆列表

=================================================================
@Author:木又
@File:work_07day.py
@Time:2020/7/14 22:49
@Name:Ta Quan Ge

一、必做题:

1:简单题
1、函数的形参有哪几种定义形式?

1.必须参数(必备参数):定义了就一定要传,不能多传也不能少传

2.默认参数(缺省参数):定义的时候可以设置默认值,调用的时候可以传,
也可以不传,不传的时候就使用默认值

3.不定长参数(动态\可变参数): 可以接受0个或者多个参数
*args:只能接收位置传参,以元组的形式保存
**kwargs: 只能接收关键字传参,以字典的形式保存

2、函数的实参有哪几种形式?
两种定义形式 :
1.位置传参(位置参数):按照参数定义的位置进行传递
2.关键字参数(关键字参数):通过参数名字,指定传递

2、利用上课讲的for循环嵌套的知识点,封装一个可以打印任意比列三角形的函数
(注意点:和上课的有区别,这个是倒三角)

# * * * * * *
# * * * * *
# * * * *
# * * *
# * *
# *
def fun(a, b):
    for i in range(-a, b):
        # print(i)
        for j in range(-i):
            print("* ", end="")
        print()


fun(3, 3)    # 此方法有漏洞

# 其他做法
# 法1.
def fun(n):
    res = list(range(1, n + 1))
    res.reverse()  # 使列表反序
    # print(res)
    for i in res:
        for j in range(i):
            print("* ", end="")
        print()


fun(4)


# 法2.
def fun(n):
    for i in range(n, 0, -1):
        for j in range(i):
            print("* ", end="")
        print()


fun(4)

3、定义一个可以完成任意个数字相加的函数(支持关键字传参和位置传参),并返回相加结果。
要求:调用函数传入1个数字,返回值为这个数字。
如:func(1) ----> 返回 1
调用函数传入2个数字,返回值为2个数相加的结果。
如:func(11,22) ----> 返回33
调用函数传入3个数字,返回值为3个数相加的结果。
如:func(11,22,33,) ----> 返回66
调用函数传入n个数字,返回值为n个数相加的结果。
如:func(1,2,3,4,5) ----> 返回 15
(提示:可以使用不定长参数来接收参数,对参数进行遍历再相加)

def fun(*args, **kwargs):
    tu = args
    tu1 = kwargs
    sum = 0
    for i in tu:
        sum += i
    for i in tu1.values():
        sum += i
    print(sum)


fun(1)
fun(1, 2, a=3)

简化

def fun(*args, **kwargs):
    sum = 0
    for i in args:
        sum += i
    for i in kwargs.values():    #使用位置传参时,不定长参数会以字典的形式保存,故遍历的时候要获取values
        sum += i
    print(sum)



fun(1)
fun(1, 2, a=3)

再简化

def fun(*args,**kwargs):
    print(sum(args) + sum(kwargs.values()))
fun(1)
fun(1, 2, a=3)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值