函数定义

函数定义

函数简介           

  函数就类似于是工具 提前定义好之后可以反复使用

  通俗点将就是我们提前写好的一个程序

  然后给他固定在一个地方

  然后给他赋予一个名称

  然后需要使用的时候点他的名称就可以调出来直接使用了

 

函数语法结构

  def  函数名(参数1,参数2):
    ''' 函数注释 '''
    函数体代码
    return 返回值

  1.def(必须的)

    是定义函数的关键字

  

  2.函数名(必须的)

    是函数的名字 相当于变量名
    函数名的命名规范与风格遵循变量名的

  

  3.参数1,参数2(可选的)

    参数可以没有也可以有多个
    表示在使用函数之前需要满足的一些条件

  

  4.函数注释(可选的)     

    类似于产品说明书
    主要用于介绍函数功能 参数使用 及其他情况

  

  5.函数体代码(必须的)

    函数核心的代码逻辑(重要)

  

  6.return返回值(可选的)

    使用函数之后反馈给使用者的结果 可以有也可以没有

 

函数的定义与调用

  ###########################################################
    1.函数必须先定义后调用(顺序不能乱)
    2.函数在定义阶段只检测语法不执行代码
    3.函数在调用阶段才会执行函数体代码
    如何调用函数
      函数名加括号 如果函数在定义阶段有参数则在调用阶段也需要给参数
  ###########################################################
    函数在定义与调用阶段底层原理
      1.在内存空间中申请一块空间存储函数体代码
      2.将函数体代码所在的空间地址绑定给函数名
      3.函数名加括号则会执行函数体代码

 

函数的分类

  1.内置函数

    python解释器自带的(提前给你定义好了 你直接使用即可)

  2.自定义函数

    程序员自己写的函数
    2.1.无参函数
    2.2.有参函数
    2.3.空函数

# 无参函数:在函数定义阶段括号内没有写参数(变量名)
def my_func():
    print('这个函数很牛逼')

# 有参函数:在函数定义阶段括号内写了参数(变量名)
def my_func(a,b):
    print('这个函数更牛逼')
my_func(1,2)

# 空函数:函数体代码为空(pass ...)
"""
虽然空函数本身没有含义 但是空函数可以提前规定好编写代码的思路
"""
def run():
    pass
def fight():
    pass
def talk():
    pass

 

函数参数的两大分类

  1.形式参数

    在函数定义阶段括号内所填写的参数 简称"形参"

def func(a, b):
     pass
# a和b就是函数func的形参

 

  2.实际参数

    在函数调用阶段括号内传入的参数 简称"实参"

func(1,2)
# 数据1和2就是函数func的实参

  """
  形参与实参的关系
  我们可以将形参看成是变量名 实参看成是变量值
  两者在函数调用阶段临时绑定 函数运行结束断开

  形参的表现形式只有一种就是变量名
  实参的表现形式有很多种(但是把握核心 就是 数据值)
  """

 

函数对象(函数名)

  """函数名遇到括号就会调用!!!""" 

  用法1

    函数名可以当做变量名赋值

def index():
    print('from index')
a = index
a()  # 本质就是在调用index函数

 

  用法2

    函数名还可以当做函数的实参

def index():
    print('from index')
def func(a):
    print(a)
    a()
    print('from func')
func(index)

 

  用法3

    函数名还可以当做函数返回值

def index():
    print('from index')
def func():
    print('from func')
    return index
res = func()  # 调用func并接受func的返回值
res()

 

  用法4

    函数名可以当做容器类型(内部可以存放多个数据)的元素

def index():
    print('from index')
l = [111, 222, 333, index()]
print(l)

 

  案列

def register():
    print('注册功能')
def login():
    print('登录功能')
def shopping():
    print('购物功能')
def transfer():
    print('转账功能')
def withdraw():
    print('提现功能')
def check_order():
    print('查看订单')
func_dic = {'1':register,
            '2':login,
            '3':shopping,
            '4':transfer,
            '5':withdraw,
            '6':check_order
            }
while True:
    print("""
    1.注册功能
    2.登录功能
    3.购物功能
    4.转账功能
    5.提现功能
    6.查看订单
    """)
    choice = input('请输入功能编号>>>:').strip()
    # 判断用户输入的编号在不在字典的k中
    if choice in func_dic:
        # 根据键获取值(函数名)
        func_name = func_dic.get(choice)
        # 函数名加括号调用
        func_name()
    else:
        print('功能编号不存在')

    # 下列代码的弊端在于功能较多时 代码过于复杂
    if choice == '1':
        register()
    elif choice == '2':
        login()
    elif choice == '3':
        shopping()
    else:
        print('写累了')

 

函数的嵌套调用

  嵌套调用:函数内部调用其他函数

def index():
    print('from index')
def func():
    index()
    print('from func')
func()


def my_max(a, b):
    if a > b:
        return a
    return b

def many_max(x,y,z,m):
    res = my_max(x,y)
    res1 = my_max(res,z)
    res2 = my_max(res1,m)
    return res2
ret = many_max(1,2,3,4)
print(ret)

 

函数的嵌套定义

  函数体内部定义其他函数
  将复杂的功能全部隐藏起来 暴露一个简单的接口

复制代码
def all_func(type):
    def register():
        print('注册功能')
    def login():
        print('登录功能')
    def transfer():
        print('转账功能')
    def shopping():
        print('购物功能')
    # 这里仅仅是演示嵌套定义的现象 暂不考虑优化
    if type == '1':
        register()
    elif type == '2':
        login()
    elif type == '3':
        transfer()
    elif type == '4':
        shopping()
    else:
        print('不知道啥功能')

all_func('3')
复制代码

 

闭包函数

  闭:定义在函数内部的函数
  包:内部函数使用了外部函数名称空间中的名字
    # 只有符合上述两个特征的函数才可以称之为"闭包函数"

def outer():
    x = 222
    def index():
        print('from index', x)
    return index

# 闭包函数其实是给函数传参的第二种方式
# 方式1:函数体代码需要用到数据 直接在括号内定义形参即可
def index(username):
    print(username)
def my_max(a, b):
    if a > b:
        return a
    return b
# 方式2:利用闭包函数
def outer(x,y):
    # x = 2
    # y = 40
    def my_max():
        if x > y:
            return x
        return y
    return my_max
res = outer(2,40)
print(res())
print(res())

import requests
url = 'https://www.baidu.com'
def outer(url):
    def get_content():
        # 爬取百度首页数据
        res = requests.get(url)
        if res.status_code == 200:
            with open(r'xxx.html','wb') as f:
                print('*'.center(30))
                f.write(res.content)
    return get_content

res = outer('https://www.baidu.com')
res()
res()
res()
res1 = outer('https://www.jd.com')
res1()
res1()
res1()
res1()

 

 

END

posted @ 2021-11-12 18:46  Snails蜗牛  阅读(392)  评论(0编辑  收藏  举报