0
点赞
收藏
分享

微信扫一扫

python基础——函数

大沈投资笔记 2022-04-03 阅读 97
python

函数

定义

def func():
    print("HELLO WORLD")

函数的参数

def func(x): # x是形参  #传参就是将实参的值传递给形参
    print(x)
func("abc")  #实参

函数的调用

函数调用之后,会立即执行函数体里的代码,当然,函数调用务必在声明函数之后。

  • 语法:函数名()
def func():
    print("HELLO WORLD")

#函数的调用:函数名()
func()
  • 函数调用的顺序 b()—>f()—>a()
  def f():
      print(1)
      a()
  
  def a():
      print("666")
  
  def b():
      print("abcd")
      f()
  b()

调用函数时参数的顺序

位置参数、默认参数、可变长度参数,顺序错了会报错

def test(a, b, c=4):  # c=4 默认参数
    print(a, b)


test(1, 2)  # 位置参数  

test(b=1, a=2)  # 关键字参数

 test(b=1,2)  # 关键字参数写在位置参数之前会导致出错

可变参数长度参数

*args:		用来接收任意多个实参并放在一个元组里
**kwargs:	用来接收类似于赋值的多个实参并放在一个字典里
  • 装包
  函数装包:
  def 函数(*args):  ---->此时会出现装包操作
      pass
  函数(1,2,3,4)
  
  def ah(*args):  # 把(1,2,3,4)都装到(*args)容器里
      print(args)
      s=0
      for i in args:
          s+=i
      print(s)
  
  ah(1,2,3,4,)
  • 拆包
  list ,tuple,set调用的时候: 一颗*可拆 列表(*list) | 元组(*tuple) | 集合(*set)
  
  字典dic要用两颗 *  (**kwargs)
  
  but=[23,24,45,67,85]
  ah(*but)  #把but=[23,24,45,67,85]拆包成(23,24,45,67,85)
  • **kwargs
  关键字参数
  在函数调用的时候必须传递关键字参数,才可以将其转换成key : value
  装到字典中
def show_book(**kwargs):  
    print(kwargs)
# {'bookname': '西游记', 'author': '吴承恩', 'number': 5}

show_book(bookname="西游记", author="吴承恩", number=5)

返回值

  • 返回一个数据
# 定义函数
def add2num(a, b):
    return a + b


# 调用函数,顺便保存函数的返回值
result = add2num(100, 98)

# 因为result已经保存了add2num的返回值,所以接下来就可以使用了
print(result)

  • 可以返回多个数据
def divid(a, b):
    shang = a // b
    yushu = a % b
    return shang, yushu


result = divid(5, 2)
print(result)  # (2, 1)
  • return后面可以是元组,字典,列表等只要是能够储存多个数据的类型,就可以一次性返回多个数据
  • 也可单独使用,遇到return后 后面的代码不执行

可变与不可变类型

小结:

不可变类型: 里面的内容未发生改变,地址发生了改变.
    类型: int  str  float   bool  tuple
可变类型:里面的内容发生了改变,但是地址没有发生改变.
    类型: list dict set

全局与局部变量

全局变量:   声明在函数外面的变量
局部变量:   声明在函数内部的变量


函数内部可以直接使用全局变量,但是不能直接修改
如果想修改,则必须使用关键字:global

注意:只有不可变的类型才需要加global,可变的类型不需要添加
#全局变量
a=100

def test1():
    #局部变量
    a=0
    b=8
    print("a=",a)
    print("b=",b)

def test2():
    b=9
    #局部变量的作用范围仅限函数内部
    print("a=", a)
    print("b=", b)

def test3():
    global a
    #改变全局a的值
    a-=10  #a=a-10
    print("a=", a)

为什么要用global?因为是int(不可变类型)如果是(可变类型)就不用加global,可以直接用

在这里插入图片描述

globals 和 locals

  • 以字典的形式返回

  • 内置函数  globals()可以查看全局变量  locals()可以查看局部变量
    
a = 100


def inner(c):
    b = a + c
    print('locals = {},globals = {}'.format(locals(), globals()))


inner(3)

修改变量 global nonlocal

  • 内部函数修改全局变量用global(详细请查看上一讲)

  • 内部函数修改外部变量用nonlocal

  def outer():
      a = 100
  
      def inner():
          b = 200
          # b+=a  #内部函数可以使用外部函数的变量
          nonlocal a  # 如果要修改外部函数的变量,需要在内部函数中添加nonlocal
          a += b  # 内部函数不能修改外部函数的变量
          print("我是内部函数", b)
          print(a)
  
      inner()
  outer()
  
  打印:
我是内部函数 200
300

注意:理解

内部函数-------->外部函数--------->全局-------->系统b u i l t i n s

c = 100


def outer():
    a = 10

    def inner():
        b = 200
        global c  # 如果要修改全局变量,global
        c += b
        nonlocal a  # 如果要修改外部函数的变量,需要在内部函数中添加nonlocal
        a += b

        print(a, c, b)

    inner()


outer()

--->
210  300  200

### 闭包


举报

相关推荐

0 条评论