05-函数基础

函数基础

函数简介

  • 定义:具有特定功能的一段代码
  • 优点:
    • 可以减少代码的重复书写
    • 可以将功能的实现着和使用者分开,可以提高开发效率
  • 分类:
    • 库函数:print、input、type等
    • 自定义:用户自己封装的函数

函数使用

  • 函数定义格式

    def 函数名([参数列表]):
    函数体

    []表示参数是可选的,参数可以有,也可以没有,有也可以是一个或多个。

  • 函数名:

    • 像变量名一样,只要符合标识符命名规范即可。
  • 函数调用:

    • 函数定义后不会执行,只有调用后才会执行
    • 调用格式:函数名([参数])

函数分类

  • 说明:按照函数的参数与返回值

  • 示例:

    
    # 无参无返回值
    
    def print_ten_hello():
      for i in range(10):
          print('Hello world!')
    
    
    # 带参无返回值
    
    def print_n_hello(n=10):
      for i in range(n):
          print('Hello world!')
    
    
    # 带参有返回值
    
    def add(a, b):
      return a + b

    return:返回函数的返回值,一旦执行,函数立即结束。

函数参数

  • 形参:形式参数,就是写在函数定义处的参数。

  • 实参:实际参数,就是在函数调用时传递的参数。

  • 位置参数:函数定义时没有默认值的参数,也叫必传参数。调用时的实参与定义处的形参一一对应

  • 默认参数:函数定义时有默认值的参数,调用时可以不传。默认参数必须放在最后。

  • 关键字参数:函数调用时指定参数的名字,参数的位置就无所谓了。

  • 可变长度参数:

    
    # 可变长度参数
    
    def var_len_args(a, b, *args, **kwargs):
      print(a, b)
      # 是一个元组,存放多传的位置参数
      print(args)
      # 是一个字典,存放多传的关键字参数
      print(kwargs)
    
    var_len_args(2, 3, 4, 5, name='二狗', age=10)
  • *的使用

    def show(a, b):
      print(a, b)

    show(2, 3)

    lt = [2, 3]

    show(lt[0], lt[1])

    与上面的方式等价,*相当于将列表中元素展开位置参数的形式

    show(*lt)

    def show2(aa, bb):
    print(aa, bb)

    d = {‘aa’: 123, ‘bb’: 456}

    show2(aa=d[‘aa’], bb=d[‘bb’])

    与上面的式子等价,相当于将字典中的元素展开成关键字参数的形式

    show2(**d)
    “`

函数进阶

  • 函数定义的位置是随意的吗?
    • 不是,一定要先定义再调用,也就是调用一定要在定义之后。
  • 函数的名字可以相同吗?
    • 不可以,若出现同名函数,后者会覆盖前者。
  • 函数中能否再定义一个函数?
    • 可以,函数内部定义的函数叫内部函数,它是很多高级功能的基础。

变量作用域

  • 块级作用域

    if True:
      a = 10
    
    
    # 变量没有块级作用域
    
    print(a)
  • 局部作用域

    def test():
      name = '二狗'
    
    
    # 局部变量:定义在函数内部的变量,拥有局部作用域
    
    
    # print(name)
    
  • 全局作用域

    
    # 全局变量:定义在函数外部的变量,拥有全局的作用域
    
    num = 20
    
    def show():
      # 全局变量在函数内部只能使用,不能更改
      # 局部变量与外部变量同名,局部优先
      # 若果想在函数中修改全局变量,需要声明
      global num
      num = 10
      print(num)
    
    show()
    print(num)
  • nonlocal使用

    def wai():
      n = 100
    
      def nei():
          # 声明使用非本地变量:外部函数的局部变量
          nonlocal n
          n = 200
          print(n)
    
      nei()
      print(n)
    
    wai()

常用函数

  • 内置函数(无需导入)

    print:打印、输出
    input:输入
    type:类型
    len:统计元素个数
    range:产生连续的整数对象
    enumerate:枚举可迭代对象
    ord:字符转换为ASCII
    chr:ASCII转换为字符
    id:获取变量地址,不要纠结
    abs:求绝对值
    
    类型转换:
    int、float、complex、set、list、str、dict、tuple
    
    max:求最大值(多个参数或一个容器对象)
    min:求最小值
    sum:容器对象元素求和
    pow:求幂
    round:四舍五入
    
    hex16进制
    oct:八进制
    bin:二进制
  • 模块函数(需要导入)

    '''
    import time
    
    while True:
      print('Hello world!')
      time.sleep(1)
    '''
    
    '''
    import math
    
    print(math.e)
    print(math.pi)
    print(math.ceil(3.1))
    print(math.floor(3.9))
    print(math.sqrt(4))
    print(math.radians(360))
    print(math.degrees(math.pi))
    '''
    
    import sys
    
    
    # 存放了终端运行时的所有参数列表
    
    print(sys.argv)

练习

  • 前面的练习能使用函数封装就封装成函数

  • 终端计算器,完成加减乘除功能

  • 删除列表中重复的元素

  • 统计一个字符串中字母、数字及其他字符的个数,返回一个元组

  • 返回一个列表中第二大的数

  • 完成列表的排序,支持逆序

  • 号码归属地查询:

    '''5582|1860101|010|北京市|北京联通GSM卡
    5583|1860100|010|北京市|北京联通GSM卡
    5584|1368141|010|北京市|北京移动神州行卡
    5585|1860111|010|北京市|北京联通GSM卡
    5586|1358198|010|北京市|北京移动动感地带卡
    5587|1361139|010|北京市|北京移动预付费卡
    5588|1361138|010|北京市|北京移动神州行卡
    5591|1360110|010|北京市|北京移动全球通卡
    5748|1364110|010|北京市|北京移动神州行卡
    10186|1581584|020|广东省广州市|广东移动全球通卡
    15046|1391897|021|上海市|上海移动全球通卡
    17250|1502207|022|天津市|天津移动全球通卡
    21137|1345272|023|重庆市万州|重庆移动大众卡
    22700|1347812|024|辽宁省沈阳市|辽宁移动大众卡
    24256|1377065|025|江苏省南京市|江苏移动全球通卡
    26360|1898606|027|湖北省武汉市|湖北电信CDMA卡
    28709|1860802|028|四川省成都市|四川联通GSM卡
    30641|1552961|029|陕西省西安市|陕西联通GSM卡
    31700|1563007|0310|河北省邯郸市|河北联通GSM卡
    33360|1583396|0311|河北省石家庄市|河北移动全球通卡
    34825|1508122|0312|河北省保定市|河北移动全球通卡
    35363|1551235|0313|河北省张家口|河北联通GSM卡
    37700|1331326|0316|河北省廊坊市|河北电信CDMA卡
    43500|1350358|0358|山西省吕梁市|山西移动全球通卡
    43908|1553625|0359|山西省运城市|山西联通GSM卡
    44521|1335360|0370|河南省商丘市|河南电信CDMA卡
    50078|1509369|0378|河南省开封市|河南移动全球通卡
    53603|1583981|0398|河南省三门峡|河南移动全球通卡
    53916|1335897|0410|辽宁省铁岭市|辽宁电信CDMA卡
    55248|1554254|0411|辽宁省大连市|辽宁联通GSM卡
    58618|1374272|0427|辽宁省盘锦市|辽宁移动全球通卡
    58932|1554183|0429|辽宁省葫芦岛|辽宁联通GSM卡
    60268|1340475|0431|吉林省长春市|吉林移动大众卡'''

猜你喜欢

转载自blog.csdn.net/qq_42795565/article/details/81351714