• 函数基础


    函数——function

    1. 如何定义一个简单的函数

    定义函数时,使用def(define)进行定义

    """定义了一个简单的问候用户的无参函数"""
    def greet_user():
        print('hello user!')
    """定义一个有参数的函数"""
    def greet_user(username):
        print('hello' + username.title())
    def main():
        username = 'zhang3'
        greet_user()
        greet_user(username)
    if __name__ == '__main__':
        main()
    

    大家有时候会形参与实参不分,有时候会将函数定义中的变量称为实参,函数调用的变量称为形参,不要大惊小怪!

    2. 传递实参的方式

    传递实参大致分为三种:位置实参,关键字实参,默认实参

    def describe_pet(animal_type, pet_name):
        print('
     I have a ' + animal_type + '.')
        print("My " + animal_type + "'s name is" + pet_name.title() + '.')
        
    
    • 位置实参(顺序很重要)

    python在进行函数调用时,会将函数调用的实参一一传递给形参,最简单的调用方式就是基于实参的顺序,这种关联方式称之为位置实参

    describe_pet("dog", "xiao")
    
    • 关键字实参

    使用关键字实参时,请务必准确的指定函数定义中的形参名

    关键字实参时传递给函数的名称-值对,无须考虑函数调用的顺序,清楚的指出了函数调用中各个值的用途

    describe_pet(animal_type="dog", pet_name="xiao")
    describe_pet(pet_name="xiao", animal_type="dog")
    
    • 默认值

    使用默认值时,在形参列表中必须先列出无默认值的的形参,再列出有默认值的实参,能够让Python正确的解读位置实参

    3. 函数返回值

    函数并非总是显示输出,相反它可以处理数据,返回一个或一组值,函数返回的值称为返回值。

    在python中使用return语句来完成

    • 返回简单的值
    def formatted_name(first_name, last_name):
        """返回整洁的名字"""
        full_name = first_name + " " + last_name
        return full_name.title()
    def main():
        name = formatted_name("s", "zj")
        print(name)
    if __name__ == '__main__':
        main()
    
    • 让实参变成可选的

      def get_formatted_name(first_name, last_name, middle_name=''):
          """返回整洁的名字"""
          if middle_name:
              full_name = first_name + ' ' + middle_name + ' ' + last_name
          else:
              full_name = first_name + ' ' + last_name
          return full_name.title()
      

      python将非空字符串解读为True

    • 返回字典

    def bulid_person(first_name, last_name, age=''):
        """用字典返回一个人的数据"""
        person = {'first': first_name, 'last': last_name}
        if age:
            person['age'] = age
        return person
    
    

    4. 传递列表

    • 在函数中修改列表

    问题:一家3D打印公司,需要将打印的设计存储在一个列表中,打印后的模型移到另一个列表中,并将打印结果显示到屏幕

    """定义两个函数,一个完成打印操作,一个展示已打印的列表"""
    def printed_models(unprinted_designs, completed_models):
        """负责完成打印操作"""
        while unprinted_designs:
            current_design = unprinted_designs.pop()
            print('Printing models: ' + current_design)
            completed_models.append(current_design)
    def show_completed_models(completed_models):
        print('
    The following models have been pirnted: ')
        for completed_model in completed_models:
            print(completed_model)
    def main():
        unprinted_designs = ['iphone case', 'robot pendant', 'dodecahedron']
        completed_modles = []
        print_models(unprinted_designs, completed_modles)
        show_completed_models(completed_modles)
    if __name__ == '__main__':
        main()
    # 运行结果:
    """
    Printing design: dodecahedron
    Printing design: robot pendant
    Printing design: iphone case
    
    The following models have been printed: 
    dodecahedron
    robot pendant
    iphone case
    """
    
    • 禁止在函数中修改列表

      function_name(list_name[:])

    切片表示法[:],创建列表的副本

    5. 传递任意数量的实参

    形参名 *toppings 中的星号,让python创建一个空的元组,并将所有的值封装的元组中,因此可以传递任意数量的实参。

    def make_pizza(*toppings):
        print(toppings)
    make_pizza('x')
    make_pizza('x', 'y', 'z')
    

    形参名 **user_info中的两个星号让python创建一个名为:user_info的空字典,并将受到的键-值对封装起来。

    def build_profile(first, last, **user_info):
        """创建一个字典,其中包含我们知道的有关用户的一切"""
        profile = {}
        profile['first_name'] = first
        profile['last_name'] = last
        for key, value in user_info.items():
            profile[key] = value
        return profile
    

    6. 将函数存储在模块中

    ​ 通过将函数存储在称为模块(moudle)的独立的文件中,隐藏程序代码的细节,将重点放在程序的高层逻辑上,能够重用函数,再将模块导入(import)到程序中。

    ​ 要想让函数是可导入的,得先创建模块,模块是以.py结尾的文件,包含要导入的程序中的代码。

    • 导入整个模块

      导入模块的名字,可在程序中使用该模块的所有函数

      import moudle_name

      使用模块中的函数

      moudle_name.function_name()

    • 导入特定的函数

      from moudle_name import function_name

      通过逗号分隔函数名,可根据需要导入任意数量的函数

      from moudle_name import function_0, function_1, function_2,....

    • 使用as给模块起别名

    如果要导入的函数名称与当前程序中的名称冲突,或者导入的函数名称过长,可指定简短而独一无二的别名——函数的另一个名称,类似于外号。

    from moudle_name import function_name as fn

    • 使用as给函数起别名

      import moudle_name as mn

    • 导入模块中所有的函数

    使用星号(*****)运算符可让python导入模块中的所有函数,最佳的做法是导入你需要的函数,或者导入模块,再使用句点表示法

    from moudle_name import *

    7. 函数编写指南

    编写函数时,应牢记几个细节

    • 应给函数指定描述性名称,做到见名知意,且只在其中使用小写字母和下划线
    • 在函数的定义的后面都应有一定的文档字符串描述性语言,阐述函数的功能,
    • 函数定义中,给形参指定默认值时,等号两边不要有空格
    • 函数调用时,使用关键字实参时,等号两边不要有空格
  • 相关阅读:
    DOM操作:
    定时器
    7.thinkphp框架控制器
    1.thinkphp框架介绍
    4.thinkphp框架url访问
    6.thinkphp框架路由
    2.thinkphpk框架基础
    5.thinkphp框架配置文件
    3.thinkphp框架入口文件
    8.thinkphp框架数据库
  • 原文地址:https://www.cnblogs.com/rainszj/p/11252670.html
Copyright © 2020-2023  润新知