博客
关于我
Python基础(7)--函数
阅读量:797 次
发布时间:2023-03-07

本文共 4806 字,大约阅读时间需要 16 分钟。

Python 函数与参数详解

1. 函数定义与执行

在 Python 中,函数是通过 def 语句定义的。需要注意的是,函数不会在定义时就被创建,而是只有当 def 语句被执行后,函数对象才被创建,并赋值给变量名。函数的定义格式如下:

def function_name(arg1, arg2[...]):    
statement[return value]

如果没有 return 语句,函数默认返回 None。函数名的命名规则包括:

  • 必须以下划线或字母开头
  • 可以包含字母、数字或下划线的组合
  • 不能使用任何标点符号
  • 区分大小写
  • 不能是保留字

2. 作用域与命名空间

Python 使用命名空间来存储对象,并遵循以下作用域规则:

  • 每个模块都有自己的全局作用域。
  • 函数定义的对象属于局部作用域,只在函数内有效。
  • 赋值的对象属于局部作用域,除非使用 global 关键字声明。

LGB 查找规则

  • Local (局部):先查找局部作用域。
  • Global (全局):如果未在局部找到,则查找全局作用域。
  • Built-in (内置):如果全局中未找到,则查找内置作用域。
  • 如下示例:

    a = 2
    b = 2
    def test(b):
    a = a * b
    return test
    print(test(10)) # 输出 20

    在上述代码中,b 在局部作用域中找到,a 在全局作用域中找到。

    3. 参数传递规则

    1. 参数传递不影响调用者

    a = 1
    def test(a):
    a = a + 1
    print(a)
    print(a) # a 值不变
    test(a)

    2. 可变对象参数会影响调用者

    a = 1
    b = [1, 2]
    def test(a, b):
    a = 5
    b[0] = 4
    print(a, b)
    print(a, b) # b 值已被更改
    test(a, b)

    3. 参数类型与传递

    参数是对象指针,Python 不需要在 advance 定义传递的对象类型。例如:

    def test(a, b):
    return a + b
    test(1, 2) # 返回 3
    test("a", "b") # 返回 'ab'
    test([12], [11]) # 返回 [12, 11]

    4. 函数参数的默认值与元组、字典参数

    默认参数

    def function(ARG=VALUE)

    元组参数

    def function(*ARG)

    字典参数

    def function(**ARG)

    参数规则

    • 默认值必须在非默认参数之后。
    • 在单个函数定义中,只能使用一个 *ARG 和一个 **ARG
    • *ARG 必须在连接参数和默认参数之后。
    • **ARG 必须在最后定义。

    5. 常用内置函数

    1. 绝对值

    abs(x)

    示例:

    print(abs(-100))  # 100
    print(abs(1 + 2j)) # 2.2360679775

    2. 检查是否可调用

    callable(object)

    示例:

    print(callable("123"))  # 0
    print(callable(chr)) # 1

    3. 比较函数

    cmp(x, y)

    示例:

    a = 1
    b = 2
    c = 2
    print(cmp(a, b)) # -1
    print(cmp(b, a)) # 1
    print(cmp(b, c)) # 0

    4. 除法运算

    divmod(x, y)

    示例:

    print(divmod(10, 3))  # (3, 1)
    print(divmod(9, 3)) # (3, 0)

    5. 类型检查

    isinstance(object, class-or-type-or-tuple)  # bool

    示例:

    a = 'isinstance test'
    b = 1234
    print(isinstance(a, str)) # True
    print(isinstance(a, int)) # False
    print(isinstance(b, str)) # False
    print(isinstance(b, int)) # True

    6. 列表长度

    len(object)  # integer

    示例:

    print(len("aa"))  # 2
    print(len([1, 2])) # 2

    7. 幂运算

    pow(x, y[, z])

    示例:

    print(pow(2, 4))  # 16
    print(pow(2, 4, 2)) # 0
    print(pow(2.4, 3)) # 13.824

    8. 范围生成

    range([lower,]stop[,step])

    示例:

    print(range(10))  # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
    print(range(1, 10)) # 1, 2, 3, 4, 5, 6, 7, 8, 9
    print(range(1, 10, 2)) # 1, 3, 5, 7, 9

    9. 四舍五入

    round(x[, n])

    示例:

    print(round(3.333))  # 3.0
    print(round(3)) # 3.0
    print(round(5.9)) # 6.0

    10. 数据类型转换函数

    1. 转换为字符

    chr(i)

    示例:

    print(chr(65))  # A
    print(chr(66)) # B
    print(chr(65) + chr(66)) # AB

    2. 转换为复数

    complex(real[, imaginary])

    示例:

    print(complex("2+1j"))  # (2+1j)
    print(complex("2")) # (2+0j)
    print(complex(2, 1)) # (2+1j)
    print(complex(2L, 1)) # (2+1j)

    3. 转换为浮点数

    float(x)

    示例:

    print(float("12"))  # 12.0
    print(float(12L)) # 12.0
    print(float(12.2)) # 12.2

    4. 转换为十六进制

    hex(x)

    示例:

    print(hex(16))  # 0x10
    print(hex(123)) # 0x7b

    5. 转换为长整数

    long(x[, base])

    示例:

    print(long("123"))  # 123L
    print(long(11)) # 11L

    6. 转换为列表

    list(x)

    示例:

    print(list("hello world"))  # ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
    print(list((1, 2, 3, 4))) # [1, 2, 3, 4]

    7. 转换为整数

    int(x[, base])

    示例:

    print(int(3.3))  # 3
    print(int(3L)) # 3
    print(int("13")) # 13
    print(int("14", 15)) # 19

    8. 最小值

    min(x[, y, z, ...])

    示例:

    print(min(1, 2, 3, 4))  # 1
    print(min((1, 2, 3), (2, 3, 4))) # (1, 2, 3)

    9. 最大值

    max(x[, y, z, ...])

    示例:

    print(max(1, 2, 3, 4))  # 4
    print(max((1, 2, 3), (2, 3, 4))) # (2, 3, 4)

    10. 转换为八进制

    oct(x)

    示例:

    print(oct(8))  # 010
    print(oct(123)) # 0173

    11. 获取对象类型

    type(obj)

    示例:

    print(type(a))  # 
    print(type(copy)) #
    print(type(1)) #

    6. 序列处理函数

    1. 过滤函数

    filter(function, list)

    示例:

    def nobad(s):
    return s.find("bad") == -1
    s = ["bad", "good", "bade", "we"]
    print(filter(nobad, s)) # ['good', 'we']

    2. 地图函数

    map(function, list[, list])

    示例:

    import string
    s = ["python", "zope", "linux"]
    print(map(string.capitalize, s)) # ['Python', 'Zope', 'Linux']

    3. Reduce函数

    reduce(function, seq[, init])

    示例:

    import operator
    print(reduce(operator.mul, [2, 3, 4, 5])) # ((2 * 3) * 4) * 5 = 120
    print(reduce(operator.mul, [2, 3, 4, 5], 1)) # (((1 * 2) * 3) * 4) * 5 = 120

    4. 拼接函数

    zip(seq[, seq, ...])

    示例:

    print(zip([1, 2, 3], [4, 5], [7, 8, 9]))  # [(1, 4, 7), (2, 5, 8)]

    7. 其他内容

    • 函数定义的时机def 语句可以出现在任何语句可以出现的地方,甚至可以嵌套。
    • 函数命名:可以通过赋值来更改函数名,并通过新的变量名调用。
    • 内建函数:可以使用 callable() 判断对象是否可调用。
    • 函数示例:如定义一个 Fibonacci 数列函数:
    def fibs(num):
    result = [0, 1]
    for i in range(num - 2):
    result.append(result[-2] + result[-1])
    return result
    print(fibs(10)) # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
    • 参数传递:字符串、元组和数字是不可变的,修改参数不会影响外部变量。
    • 关键字参数与默认值
      def hello(greeting='hello', name='world!'):
      print(f"{greeting}, {name}!")
      hello() # 输出 "hello, world!"
      hello(greeting='Greetings', name='universe') # 输出 "Greetings, universe!"
    • 混合参数
      def print_params(title, *params):
      print(title)
      print(params)
      print_params('params:', 1, 2, 3) # 输出 'params: (1, 2, 3)'
      print_params_2('Nothing:',) # 输出 'Nothing: ()'

    通过以上内容,可以看出 Python 的函数与参数机制非常灵活且强大,适用于多种场景和需求。

    转载地址:http://vxofk.baihongyu.com/

    你可能感兴趣的文章
    python 保留精度及增加去除数字的千位分隔符(金额化数字)
    查看>>
    python 倒计时 9,8,7,。。。。。。0
    查看>>
    Python 入门开发学习笔记之数据的增删改查
    查看>>
    Python 入门教程(2)搭建环境 2.4、VSCode配置Node.js运行环境
    查看>>
    Python 八大排序算法合集
    查看>>
    python 关于epoll的学习
    查看>>
    Python 内存管理
    查看>>
    Python 内嵌函数:它们有什么用处?
    查看>>
    Python 内置 sum 函数 vs. for 循环性能
    查看>>
    python 内置slice的用法
    查看>>
    Python 内置时间模块
    查看>>
    python 内部如何实现命名元组?
    查看>>
    Python 写Android App性能:入门到高级
    查看>>
    python 写入json数据到数据库
    查看>>
    Python 出现 TypeError: ‘encoding‘ is an invalid keyword argument for this function 解决方法
    查看>>
    python 出现 TypeError: ‘list‘ object is not callable 的解决方法
    查看>>
    python 函数1
    查看>>
    python 函数学习
    查看>>
    Python 函数随笔 map()函数,lambda自定义函数
    查看>>
    Python 分析天气,告诉你中秋应该去哪里
    查看>>