python 进阶函数-2 | 函数作为返回值与参数以及作用域

2025-07-20T17:30:00

函数名补充

  • 变量名可指向数据,函数
  • 编译型语言,自定义函数前置

函数作为元素

  • 函数作为对象,可被任意变量指向
  • 指向函数对象后的变量可执行

    def add_func():
        return 123
    
    a1 = [add_func,add_func()]
    print(a1[0],a1[1])
    
    res = a1[0]()
    print(res)
  • 函数可被hash,可作为集合的值和字典的键

函数元素应用场景

  • 序号选择功能 | 执行单一功能

    • if…else
    • 函数作为元素

      
      def send_pic():
          pass
      
      def send_word():
          pass
      
      def send_audio():
          pass
      def send_video():
          pass
      
      #if...else....
      choice_dict = {
          '1':send_pic,
          '2':send_word,
          '3':send_audio,
          '4':send_video
      }
      
      print('1,发送照片. 2,发送文字。 3,发送音频. 4,发送视频.')
      
      user_input_1 = input('请输入序号').strip()
      func_choice = choice_dict.get(user_input_1)
      
      if not func_choice:
          print('请重新输入')
      else:
          func_choice()
          
      #函数作为元素
      
      print('1,发送照片. 2,发送文字。 3,发送音频. 4,发送视频.')
      
      user_input_1 = input('请输入序号').strip()
      
      if user_input_1 == '1':
          send_pic()
      elif user_input_1 == '2':
          send_word()
      elif user_input_1 == '3':
          send_audio()
      elif user_input_1 == '4':
          send_video()
  • 绑定函数执行 | 执行多个功能

    def send_pic():
        pass
    
    def send_word():
        pass
    
    def send_audio():
        pass
    def send_video():
        pass
        
    tool_func_list = [send_pic, send_word, send_audio, send_video]
    
    for item in tool_func_list:
        item()
       
    
  • 多次函数添加参数

    添加多个参数可打包(args和* kwargs)

    作为元素时,参数可使用列表或字典绑定

    • 与列表绑定A

      def send_pic(path,content):
          pass
      
      def send_word(come,content):
          pass
      
      def send_audio(path,content):
          pass
      def send_video(path,content):
          pass
      
      #选择函数,添加默认参数
      choice_func_dict = {
          '1':[send_pic,['a/1.jpg','123']],
          '2':[send_word,['alex','bit']],
          '3':[send_audio,['a/1.mp3','bit']],
          '4':[send_video,['a/1.mp4','bit']],
      }
      
      print('1,发送照片. 2,发送文字。 3,发送音频. 4,发送视频.')
      user_input = input('输入序号').strip()
      func = choice_func_dict.get(user_input)
      func_execution = func[0]
      func_parameter = func[1]
      func_execution(*func_parameter)
    • 与列表绑定B

      dict_list = [
          [send_pic,['a/1.jpg','123']],
          [send_word,['a/1.jpg','123']],
          [send_audio,['a/1.jpg','123']],
          [send_video,['a/1.jpg','123']],
      ]
      
      for i in dict_list:
          func = i[0]
          parameter = i[1]
          func(*parameter)

- 与字典绑定
    
    ```python
    def send_pic(path,content):
        pass
    
    def send_word(come,content):
        pass
    
    def send_audio(path,content):
        pass
    def send_video(path,content):
        pass
    
    func_list = [
        {'name':send_pic,'parameter':{'path':'a/1.jpg','content':'123'}},
        {'name':send_word,'parameter':{'come':'a/1.jpg','content':'123'}},
        {'name':send_audio,'parameter':{'path':'a/1.jpg','content':'123'}},
        {'name':send_video,'parameter':{'path':'a/1.jpg','content':'123'}},
    ]
    
    for item in func_list:
        func = item['name']
        parameter = item['parameter']
        func(**parameter)
    ```
    

### 函数赋值变量

> 函数名应避免重名与内置函数,否则覆盖
> 
- 变量可指向任意对象的地址
- 任意对象都有他的方法
    
    ```python
    def func(a,b):
        print(a,b)
    
    aa = func
    
    func(1,2)
    aa(1,2)
    
    ```
    

函数作为参数或返回值

函数作为参数

函数引用外部函数,修改内部数据。
#函数作为参数
def func_plus(a):
    return a+100

def func_exec(a):
    res = a(10)
    return res

data = func_exec(func_plus)
print(data)

函数作为返回值

函数返回其他函数,替身函数,修改外部数据
#函数作为返回值
def func_plus(a):
    return a+100

def func_handler():
    print('使用func_plus函数')
    return func_plus

data_source = func_handler()
data = data_source(10)
print(data)

return与print差别

print在过程展示,return返回给调用者
def add_func():
    print('123')

def inside_func(a):
    ret = a()
    return ret

v1 = inside_func(add_func)
print(v1)

函数作用域

python中以函数为作用域,其他语言以缩进{}为作用域

函数内部数据共享,函数内部符合作用域定义

#函数内部数据共享
def func_zone1():
    name = 'wupeiqi'
    age = 18
    print(age,name)

def func_zone2():
    age = 23
    name = 'alex'
    print(age,name)

func_zone1()
func_zone2()
#函数作用域
#函数内部不以缩进为作用域(适合其他语言),以函数内部为作用域
def func_zone1():
    name = 'wupeiqi'
    age = 18
    for num in range(age):
        final_num = num
    print(final_num)
    print(age,name)

函数全局变量和局部变量

  • 全局变量大写(不成文规定)
  • 函数拥有局部变量,py文件拥有全局变量
  • 优先调用函数内变量,函数中未定义函数从父级寻找
#函数作用域调用
PUB_URL = 'https://123.com'
PUB_NAME = '123'
#优先调用函数内变量,函数中未定义函数从父级寻找
def public_func():
    a = [1,2,3]
    print(a)
    print(PUB_NAME)

public_func()
  • 函数默认可查看,修改可变类似的全局函数,不可重新指向新地址(赋值)

    PUBLIC_LIST  = [1,2,3]
    PUBLIC_NAME = 'alex'
    
    def change_pub():
        PUBLIC_LIST.append(4)
        print(PUBLIC_NAME)
    
    change_pub()
    print(PUBLIC_LIST) # [1,2,3,4]
  • 函数使用global参数可重新对全局函数赋值

    def change_pub2():
        global PUBLIC_LIST
        global PUBLIC_NAME
        PUBLIC_LIST = [7,8,9]
        PUBLIC_NAME = 'eric'
    
    change_pub2()
    print(PUBLIC_LIST,PUBLIC_NAME) #[7, 8, 9] eric
    
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »