Python第八课

1.函数上

1.1函数简介

  • 函数也是一个对象
    注意:函数必须符合标识符命名规范(可以包含字母、数字和下划线_,但是不能以数字开头)
    print —>是函数对象
    print() —>是调用函数

# 1. 函数的创建
# 2. 函数的调用
# 3. 函数的参数
# 4. 函数的返回值

print()  # 打印函数

# 函数的特点:
# 1. 函数中可以用来保存一些可执行的代码,在你需要的时候可以对这些代码进行多次的调用
# 2. 函数中保存的代码不会立即执行,需要调用函数的时候代码才会执行

# 语法
# def 函数名([形参1,形参2,形参3....]):
#     代码块


def fun():  # 自定义函数   fun是函数名,又可以称呼为函数对象
    print('这是我的第一个函数')


fun()  # 函数的调用
fun()  # 函数的调用
fun()  # 函数的调用
关键字的限制:
print=1
print(print)#TypeError: 'int' object is not callable ---->TypeError: int对象不可调用

1.2 函数的参数

1.2.1形参和实参

  • 形参(形式参数) 定义形参就相当于在函数内部声明了变量,但实际上不是赋值
  • 实参(实际参数)指向形参,那么在函数调用时必须传递实参,实参会将其赋值给对应的形参。有几个形参就要有几个实参。
def pred(a):
	a=b # UnboundLocalError: local variable 'b' referenced before assignment --->局部变量'b'在赋值之前引用(应当将引用的变量放置于使用前)
 #正确输入:b=10
 #         a=b
	b=10
    k=b+4*2
    print(b)

pred(a=0)

#执行结果:10

def pred(a):
    b = 10
    a=b

    k=b+4*2
    print(b)

pred(a)#NameError: name 'a' is not defined --->NameError: name 'a'没有定义(应当在调用时给予一个值。因为未通过实参给定义的形参赋值,而且该代码调用和定义均未给予一个值,等于一个死循环。)
#也可以这么写:
def pred(a):
    a=b
    print(a)
b=10#
pred(b)#
def fun(a):
    a=B
    a[0]=False
    print(a,B,id(a),id(B))
# B=[1,2,4,5]
B=123#TypeError: int对象不支持项赋值(原因在于a[0]=False 这一行代码,a[0]这时值为int, 不再是列表)
fun(B)

1.2.2函数的传递方式

  • 定义形参时,可以为形参指定默认值。指定默认值之后,如果用户传递了参数,则默认值不会生效。如果没有传递参数,默认值就会生效。
# 1. 位置传参  将对应位置上的实参赋值给对应位置上的形参
# def fun(a, b, c=20):  # c=20 这个就是给c设置了一个默认值, 当设置了默认值之后,可以不传递这个参数的实参,那么这个时候这个参数的值就是这个默认值, 但是你如果传递了这个实参,那么就会覆盖掉这个默认值
#     print(a)
#     print(b)
#     print(c)
#
#
# fun(1, 2, 3)

# 2. 关键字传参  可以不按照定义形参的顺序去传递实参,根据参数名进行传递参数
# def fun(a, b, c=20):
#     print(a)
#     print(b)
#     print(c)
#
#
# fun(a=1, c=3, b=2)


# 位置传参和关键字传参的混合使用: 位置传参必须放到关键字传参的前面
# def fun(a, b, c=20):
#     print(a)
#     print(b)
#     print(c)
#
#
# fun(1, b=2, c=3)


def fun(b, a, c=20):
    print(a)
    print(b)
    print(c)


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

细节注意:

def purple(a,b,v):
    print(a+b*v)

# purple(a=4,6,4)
# SyntaxError: positional argument follows keyword argument(位置传参必须放到关键字传参的后面)
def purple(a,b,v):
    print(a+b*v)

#purple(6,4,a=4)
#TypeError: purple() got multiple values for argument 'a'(该次调用函数中,给a赋予了两个值,一个是6一个是4,6从位置传参而来,4是从关键字传参而来)

#正确书写
def purple(a,b,v):
    print(a+b*v)

purple(6,4,v=4)
同上一样的代码,注意细节:
def purple(a,b,v=20):
    print(a+b*v,v)

purple(6,4,v=4)#调用时,不论是位置传参还是关键字传参,用的值的对象在形参中已经被赋予了一个值,那么则调用的值直接覆盖定义。)
#运行结果为:22 4

1.3 不定长参数

def fun(a,b,v):
    print(a+b+v)

fun(1,2,3,4)#TypeError: fun() takes 3 positional arguments but 4 were given --->TypeError: fun()接受3个位置参数,但给出了4个 ---->正确写法也可以使用不定长参数
  • 定义函数时,可以在函数前加一个*,这样形参可以获取到所有的实参,它会将所有的实参保存到一个元组中
def fun(c,b,*args):
    print(*args)#交互界面呈现传递的参数值
    print(args)#交互界面呈现元组形式
fun(2,342,34,4234,43534,234,23,423)
#运行结果:
34 4234 43534 234 23 423
(34, 4234, 43534, 234, 23, 423)
  • 带*的实参只有一个,可以和其他参数配合使用
  • *形参只能接收位置函数,不能接收关键字函数
  • **形参可以接收其他的关键字函数,它会将这些关键字函数统一保存到字典当中。字典的key就是关键字函数的名字,字典的value就是参数的值
  • **只能有一个,并且写在所有参数的后面
#正确写法1:def fun(c,*args,b=3) --->给关键字b 一个值
#正确写法2:def fun(c,b,*args): --->对*args的位置进行移动,移至所有参数的最后。
    print(*args)
    print(args)
    r=0
fun(2,342,34,4234,43534,234,23,423)
# def fun(a, b, c):
#     print(a + b + c)
#
# fun(1, 2, 3)

# 不定长参数: 不知道会接受几个实参,所以用不定长参数(形参)来接受实参
# def fun(c, *args, b):
#     # *a就是不定长参数  当*a和位置传参混合使用的时候,位置参数一定要放到*a的前面
#     # 当*a和关键字传参一起使用的时候,关键字传参要放到后面去
#     # 顺序: 位置参数, *args, 关键字参数, **kwargs
#     print(*args)
#     print(args)
#     r = 0
#     for i in a:
#         r += i
#     print(r)
#
#
# fun(2, 3, 4, 5, b=1)


def fun(c, **kwargs):
    # print(**a)
    print(kwargs)
    # r = 0
    # for i in a:
    #     r += i
    # print(r)


fun(2, b=1, d=2, e=3)


def fun1(*args, **kwargs):  # 万能函数
    pass

1.4参数的解包

  1. 打印名片程序:输入姓名,电话号码,性别,最后打印出来名片控制姓名⻓度为6-20电话号码⻓度11性别只能允许输入男或女每一样信息不允许为空
def program1(a,b,c):
    a=input('请输入姓名:')
    b=input('请输入电话号码:')
    c=input('请输入性别:')
    list1=['男','女']

    if 6<=len(a)<=20:
        print(a)
    else:
        print('名片控制姓名⻓度为6-20')

    if len(b)==11:
        print(b)
    else:
        print('电话号码⻓度11')

    for i in list1:
        if i in c :
            print(c)


program1('','','')
  1. 使用函数求前20个斐波那契数列斐波那契数列:1,1,2,3,5,8,13,21…即: 起始两项均为1,此后的项分别为前两项之和2.
def sum(a):

    list=[1,1]
    while len(list)<=a:
        list.append(list[-1]+list[-2])

    print('前',a,"的斐波那契数:", list)

sum(20)
  1. 编写一段代码,定义一个函数求1-100之间所有整数的和,并调用该函数打印出结果
def num(a):
    r=0
    for i in range(a):
        i+=1
        r+=i
    print(r)

num(100)

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值