python3 函数基础知识

简介: python3 函数基础知识

1. 函数简介(function)

- 函数也是一个对象
- 对象是内存中专门用来存储数据的一块区域
- 函数可以用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次的调用
- 创建函数:
    def 函数名([形参1,形参2,...形参n]) :
        代码块
    - 函数名必须要符号标识符的规范
        (可以包含字母、数字、下划线、但是不能以数字开头)    
- 函数中保存的代码不会立即执行,需要调用函数代码才会执行
- 调用函数:
    函数对象()
- 定义函数一般都是要实现某种功能的 

2. 函数的参数

- 在定义函数时,可以在函数名后的()中定义数量不等的形参,
    多个形参之间使用,隔开
- 形参(形式参数),定义形参就相当于在函数内部声明了变量,但是并不赋值
  1.定义形参时,可为形参指定默认值
    1.1 指定默认值后,如果用户传递了参数则默认值没有任何作用;如果用户没有传递,则默认值就会生效;
      def fn(a = 5, b = 10, c):
                print(a)
                print(b)
                print(c)
- 实参(实际参数)
    1. 如果函数定义时,指定了形参,那么在调用函数时也必须传递实参,
        实参将会赋值给对应的形参,简单来说,有几个形参就得传几个实参;
    2. 实参的传递方式:
      2.1 位置参数:将对应位置的实参复制给对应位置的形参;
          第一个实参赋值给第一个形参,第二个实参赋值给第二个形参;
        2.2 关键字参数:不按照形参定义的顺序去传递,而直接根据参数名去传递参数
          def fn(a, b, c):
            print(a)
          print(b)
          print(c)
      fn( b=1, c=2, a=3) # 3 1 2
            位置参数和关键字参数可混合使用,但必须将位置参数写到前面
        2.3 函数在调用时,解析器不会检查实参的类型,可传递任意类型的对象
          在函数中对形参进行重新赋值,不会影响其他的变量
            若形参执行的是一个对象,当我们通过形参修改对象时 影响所有指向该对象的变量。若避免改变外部参数c,可将c的副本传入函数
          def fn1(a):                      def fn2(a):  
                a = 20              a[0] = 20
                print(a) # 20         print(a) # [20,2,3]
            c = 10               c = [1,2,3]
            fn1(c)               fn2(c)
                             fn2(c.copy())
                               fn2(c[:])
            print(c)  #10          print(c) # [20,2,3]
                                  # [1,2,3]
         2.4 定义函数时,可在形参前边加一个*,这样形参将会获取所有的实参,它将所有的实参保存到一个元组中。
           #  求任意个数字的和
              def fn1(*nums):
                    result = 0
                    for a in nums:
                        result += a
                    print(result)
             2.4.1 带*的参数只能有一个;带*的参数,可和其他参数配合使用;
           *形参只能接收位置参数,不能接收关键字参数
                   注意:带*的参数后的所有参数,必须以关键字参数的形式传递
                   # 所有的位置参数都给a,b和c必须使用关键字参数
                   def fn2(*a,b,c):
                     print(a,b,c)
                   fn2(1,2,3,4,b=5,c=6)
             2.4.2 **形参可接收其他的关键字参数,并将这些参数统一保存到一个字典中。字典的key就是参数的名字,字典的value就是参数的值。
                 **形参只能有一个,并且必须写在所有参数的最后;
                def fn3(**a):
                      print(a)
                    fn3(b=1,c=3,d=4) #  {'b':1,'c':3,'d':4}
参数的解包(拆包)
  传递实参时,可在序列类型的参数前添加*,它会自动地将序列中的元素依次作为参数传递;
    要求序列中元素的个数必须和形参的个数一致
        def fn4(a,b,c):
            print(a,b,c)
        # 创建一个元组
        t = (1,2,3)
        fn4(*t)
    通过**对一个字典进行解包操作
      # 创建一个字典
        d = {'a':1,'b':2,'c':3}
        fn4(**d)
返回值:通过return指定函数的返回值
  return 后边可跟任意的对象
  如果仅仅写return 或者 不写 return ,则相当于 return None
  return 后面的代码都不会执行
help():查询python中的内置函数
  语法:help(函数对象) # help(print)
文档字符串(doc str):在函数内部编写文档字符串(函数的说明)
    def fn(a:int,b:bool,c:str='hello') -> int:
        '''
        这是一个文档字符串的示例
        '''
        return 10
作用域(scope):变量生效的区域
    全局作用域
      在程序执行时创建,在程序执行结束时销毁
        所有函数以外的区域都是全局作用域
        全局变量可以在程序的任意位置被访问
    函数作用域
      在函数调用时创建,在调用结束时销毁
        函数每调用一次就会产生一个新的函数作用域
    局部变量只能在函数内部被访问
    变量的查找
      使用变量时,会优先在当前作用域中寻找该变量,如果有则使用,如果没有则继续去上一级作用域中,以此类推,
        直到找到全局作用域,依然没有 则会抛出异常
        a = 20
        def fn3():
          global a  # 在函数内部修改全局变量,则需要使用global关键字来声明变量
            a = 10  # 修改全局变量
            print(a) #10
        fn3()
        print(a) #10
命名空间(namespace)
    命名空间:变量存储的位置,每一个变量都需要存储到指定的命名空间中;
    每一个作用域都会有一个它对应的命名空间;
    全局命名空间:保存全局变量;函数命名空间:保存函数中的变量;
    命名空间实际上就是一个字典,一个专门用来存储变量的字典;
    locals()  用来获取当前作用域的命名空间,返回一个字典;
    globals() 函数可用来在任意位置获取全局命名空间;
        aa = 1
        def fn1():
          a = 10
          scope = locals()
          scope['b'] = 20
          globalScope = globals()
          print(scope)  # {'a': 10, 'b': 20}
          print(scope['a']) # 10
          print(globalScope)
        fn1(globalScope)  # {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001856A170850>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'e:\\python开发\\code\\test.py', '__cached__': None, 'aa': 1, 'fn1': <function fn1 at 0x000001856BE1F1F0>}
递归式的函数(在函数中自己调用自己):
  1.两个要件:
      1.1 基线条件:问题可被分解为最小问题,当满足基线条件时,递归就不在执行了;
        1.2 递归条件:将问题继续分解的条件;
    2.递归和循环类似,基本可以相互代替的;
        创建一个函数,求任意数的阶乘
            方法一(递归):
                def fn1(n):
                    # 基线条件:判断是否为1,如果为1 则此时不能再继续递归
                    if n == 1 :
                        return 1
                    # 递归条件
                    return n*fn1(n-1)
                print(fn1(20))  # 2432902008176640000
            方法二(循环):
                def fn2(n):
                  '''
                    该函数用来求任意数的阶乘
                    参数:
                      n 要求阶乘的数字
                  '''
                  result = n
                  for i in range(1,n):
                    result *= i
                  return result
                print(fn2(20))  # 2432902008176640000
相关文章
|
1天前
|
开发者 Python
Python入门:8.Python中的函数
### 引言 在编写程序时,函数是一种强大的工具。它们可以将代码逻辑模块化,减少重复代码的编写,并提高程序的可读性和可维护性。无论是初学者还是资深开发者,深入理解函数的使用和设计都是编写高质量代码的基础。本文将从基础概念开始,逐步讲解 Python 中的函数及其高级特性。
Python入门:8.Python中的函数
|
1月前
|
存储 人工智能 Python
[oeasy]python061_如何接收输入_input函数_字符串_str_容器_ 输入输出
本文介绍了Python中如何使用`input()`函数接收用户输入。`input()`函数可以从标准输入流获取字符串,并将其赋值给变量。通过键盘输入的值可以实时赋予变量,实现动态输入。为了更好地理解其用法,文中通过实例演示了如何接收用户输入并存储在变量中,还介绍了`input()`函数的参数`prompt`,用于提供输入提示信息。最后总结了`input()`函数的核心功能及其应用场景。更多内容可参考蓝桥、GitHub和Gitee上的相关教程。
16 0
|
1月前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
32 3
|
1月前
|
JSON 监控 安全
深入理解 Python 的 eval() 函数与空全局字典 {}
`eval()` 函数在 Python 中能将字符串解析为代码并执行,但伴随安全风险,尤其在处理不受信任的输入时。传递空全局字典 {} 可限制其访问内置对象,但仍存隐患。建议通过限制函数和变量、使用沙箱环境、避免复杂表达式、验证输入等提高安全性。更推荐使用 `ast.literal_eval()`、自定义解析器或 JSON 解析等替代方案,以确保代码安全性和可靠性。
45 2
|
2月前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
87 8
|
2月前
|
Python
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
64 18
|
2月前
|
Python
Python中的函数
Python中的函数
62 8
|
3月前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
155 67
|
3月前
|
监控 测试技术 数据库
Python中的装饰器:解锁函数增强的魔法####
本文深入探讨了Python语言中一个既强大又灵活的特性——装饰器(Decorator),它以一种优雅的方式实现了函数功能的扩展与增强。不同于传统的代码复用机制,装饰器通过高阶函数的形式,为开发者提供了在不修改原函数源代码的前提下,动态添加新功能的能力。我们将从装饰器的基本概念入手,逐步解析其工作原理,并通过一系列实例展示如何利用装饰器进行日志记录、性能测试、事务处理等常见任务,最终揭示装饰器在提升代码可读性、维护性和功能性方面的独特价值。 ####
|
3月前
|
中间件 Docker Python
【Azure Function】FTP上传了Python Function文件后,无法在门户页面加载函数的问题
通过FTP上传Python Function至Azure云后,出现函数列表无法加载的问题。经排查,发现是由于`requirements.txt`中的依赖包未被正确安装。解决方法为:在本地安装依赖包到`.python_packages/lib/site-packages`目录,再将该目录内容上传至云上的`wwwroot`目录,并重启应用。最终成功加载函数列表。

热门文章

最新文章

推荐镜像

更多