元组&函数一

元组&函数一

  • 函数及其使用
    • 函数简介:
    • 函数的参数
      • 形参和实参
      • 函数的传递方式
      • 不定长参数
      • 参数的解包
      • 浅拷贝和深拷贝
  • 作业

函数及其使用

函数简介:

  • 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

  • 函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
    任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。

  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

  • 函数内容以冒号起始,并且缩进。

  • 语法:

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

    注意:

      函数名必须符合标识符的规范(可以包含字母、数字、下划线但是不能以数字开头)。
      print是函数对象 print()是调用函数。
    

函数的参数

形参和实参

  • 形参(形式参数) 定义形参就相当于在函数内部声明了变量,但是并不是赋值。
  • 实参(实际参数)指定了形参,那么在调用函数时必须传递实参,实参将会赋值给对应的形参,简单来说有几个形参就要有几个实参。
  • 实参不管什么类型的数据都可以,如:整形,列表,逻辑值(布尔型),字符串,元组,字典数据,集合,甚至函数都可以.。

函数的传递方式

  • 定义形参时,可以为形参指定默认值。指定了默认值以后,如果用户传递了参数则默认值不会生效。如果用户没有传递,则默认值就会生效。
    def fun(a, b=0, c=0): # c=0 给形参指定默认值,当没有传递实参的时候,使用默认值,当传递了参数,使用传递进来的参数
        print(a)   # 结果:1
        print(b)   # 结果:2
        print(c)   # 结果:0
    
    fun(1, 2) # 此处调用参数为位置参数
    
  • 位置参数:位置参数就是将对应位置的实参赋值给对应位置的形参。
    def fun(a, c, b):
        print(a)    # 结果:1
        print(b)    # 结果:3
        print(c)    # 结果:2
    
    fun(1, 3, b = 2)  # 关键字b传参只能放后面,位置传参1,3实参只能放前面
    # 位置传参和关键字传参混合使用, 位置传参必须放到关键字传参的前面
    
  • 关键字参数 : 关键字参数可以不按照形参定义的顺序去传递,而根据参数名进行传递。
  • 混合使用位置参数和关键字参数的时候必须将位置参数写到关键字参数前面去。

不定长参数

  • 定义函数时,可以在形参前面加一个*,这样这个形参可以获取到所有的实参,它会将所有的实参保存到一个元组中。
  • 带*号的形参只能有一个,可以和其他参数配合使用。
  • *形参只能接受位置参数,不能接受关键字参数。
  • **形参可以接收其他的关键字参数,它会将这些参数统一保存到字典当中。字典的key就是参数的名字,字典的value就是参数的值。
  • **形参只有一个,并且必须写在所有参数的后面。

参数的解包

  • 传递实参时,也可以在序列类型的参数前添加星号,这样它会自动的将序列中元素依次作为参数传递。
  • 要求序列中的元素的个数必须和形参的个数一致。

浅拷贝和深拷贝

  • 直接赋值:其实就是对象的引用(别名)。
  • 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
    • 注意:浅复制只会复制字典本身,如果字典中还有个字典是不会进行复制的
  • 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

作业

  1. 打印名片程序:输入姓名,电话号码,性别,最后打印出来名片
    • 控制姓名长度为6-20
    • 电话号码长度11
    • 性别只能允许输入男或女
    • 每一样信息不允许为空
    import re
    
    name_input = ''
    phone_input = ''
    gender_input = ''
    
    
    def name_check():
        global name_input
        while True:
            name_input = input('请输入姓名(长度6~20位):')
            name_len = len(name_input)
            if name_len == 0:
                print('姓名不能为空!请重新输入!')
            elif 6 > name_len or name_len > 20:
                print('姓名输入的长度不在规定范围内!请重新输入!')
            else:
                break
    
    
    def phone_check():
        global phone_input
        while True:
            phone_input = input('请输入电话号码(长度11位):')
            phone_len = len(phone_input)
            ret = re.match(r"^1[35678]\d{9}$", phone_input)
            if phone_len == 0:
                print('电话号码不能为空!请重新输入!')
            elif ret is None:
                print('电话号码格式不正确!请重新输入!')
            else:
                break
    
    
    def gender_check():
        global gender_input
        while True:
            gender_input = input('请输入性别:')
            gender_len = len(gender_input)
            gender_ret = gender_input in ('男' or '女')
            if gender_len == 0:
                print('性别不能为空!请重新输入!')
            elif gender_ret:
                print('性别只能为男或女!请重新输入!')
            else:
                break
    
    
    name_check()
    phone_check()
    gender_check()
    print('---------打印名片程序-----------')
    print('\t', '姓   名:', name_input)
    print('\t', '电话号码:', phone_input)
    print('\t', '性   别:', gender_input)
    
  2. 使用函数求前20个斐波那契数
    # 第一项,第二项
    n1, n2 = 1, 1
    count = 2
    
    def def1(n1, n2, count):
        num = int(input("你需要几项?"))
        if num <= 0:
           print("请输入一个正整数。")
        elif num == 1:
           print("斐波那契数列:" + str(n1))
        else:
           print("斐波那契数列:", end=" , ")
           print(f'n1, n2', end=" , ")
           while count < num:
               nth = n1 + n2
               print(nth, end=" , ")
               n1 = n2
               n2 = nth
               count += 1
    
    
    def1(n1, n2, count)
    
  3. 编写一段代码,定义一个函数求1-100之间所有整数的和,并调用该函数打印出结果
    def f():
        n = 0
        for i in range(1,101):
            n += i
            i+=1
        print(n)
    
    
    f()
    

你可能感兴趣的:(python学习之路,python,正则表达式,列表)