zoukankan      html  css  js  c++  java
  • Python3 函数

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
    函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()。但也可以自己创建函数,这被叫做用户自定义函数。 

    一 作用

    • 减少重复代码
    • 方便修改,更易扩展
    • 保持代码一致性

    二 语法

    def 函数名():   # def是define的缩写,定义的意思
      "注释:函数的功能"
      执行语句
      reture 返回值
    
    函数名()       # 函数调用  

    实例(Python3.0+):

    使用函数来输出"Hello World!"

    def hello():
        print('hello')
    
    hello()
    
    # 运行结果
    # hello

    三 命名规则

    • 函数明必须以下划线或字母开头,可以包含任意字母、数字,下划线自由组合
    • 函数区分大小写
    • 函数明不能使用保留字

    四 参数

    • 形参:定义函数时使用的参数是形参
    • 实参:调用函数时,传入的参数是实参

    五 参数分类

    1. 位置参数 --> 必须位置一一对应,多一个不行,少一个也不行
    2. 关键字参数
    3. 默认参数
    4. 不定长参数(• 不定长无命名参数 *args --> 元组   • 不定长有命名参数 **kwargs --> 字典)   

    位置参数

    • 形参和实参必须一一对应,多一个不行,少一个也不行

    实例(Python3.0+):

    def count(name,age,sex):
        print(name)
        print(age)
        print(sex)
    
    count("xiaow",30,"man")
    #运行结果:
    #xiaow
    #30
    #man
    
    # 参数对应错误实例
    def count(name,age,sex):
        print(name)
        print(age)
        print(sex)
    
    count('xiaow',30,'man','student')
    # 运行结果
    # TypeError: count() takes 3 positional arguments but 4 were given
    

    关键字参数

    • 关键字参数,无须一一对应,缺一不行多一也不行  

    实例(Python3.0+):

    # 参数一一对应
    def foo(name,age):
        print('my name is %s age is %s' %(name,age))
    
    foo(name='xiaow',age=19)
    # 运行结果:
    # my name is xiaow age is 19
    
    # 参数不对应
    def foo(name,age):
        print('my name is %s age is %s' %(name,age))
    
    foo(age=19,name='xiaow')
    # 运行结果:
    # my name is xiaow age is 19
    
    # 参数缺失
    def foo(name,age):
        print('my name is %s age is %s' %(name,age))
    
    foo(name='xiaow')
    # 运行结果:
    # TypeError: foo() missing 1 required positional argument: 'age'

    小提示:位置参数必须在关键字参数左边

    实例(Python3.0+):

    # 位置参数在关键字参数左边
    def foo(name,age,gender):
        print('my name is %s age is % gender is %s' %(name,age,gender))
    
    foo('xiaow',age=19,gender='girl')
    # 运行结果:
    # my name is xiaow age is  19ender is girl
    
    # 位置参数在关键字参数右边
    def foo(name,age,gender):
        print('my name is %s age is % gender is %s' %(name,age,gender))
    
    foo(name='xiaow',19,girl)
    # 运行结果:
    # SyntaxError: positional argument follows keyword argument(关键字参数必须跟随在位置参数后边)

    默认参数

    •  调用函数时,如果没有传递参数,则会使用默认参数。

    实例(Python3.0+):

    # 传递默认参数
    def foo(name,age=19):
        print('my name is %s age is %s' %(name,age))
    
    foo('xiaow',20)
    # 运行结果:
    # my name is xiaow age is 20
    
    # 不传递默认参数
    def foo(name,age=19):
        print('my name is %s age is %s' %(name,age))
    
    foo('xiaow')
    # 运行结果:
    # my name is xiaow age is 19  

    不定长参数

    • 不定长无命名参数 *args(加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数
    • 不定长有命名参数 **kwargs(加了两个星号 ** 的参数会以字典的形式导入

    *args

    实例(Python3.0+):

    # 传递多个参数
    def foo(*args):
        print(args)
        for i in args:
            print(i)
    
    foo('xiaow',20,'girl')
    # 运行结果
    # ('xiaow', 20, 'girl')
    # xiaow
    # 20
    # girl
    
    # 传递元组
    def foo(x,y,*args):
        print('x is %s' %x)
        print('y is %s' %y)
        print('args is %s' %args)
    
    foo('study','python',('xiaow',20,'girl'))
    # 运行结果:
    # x is study
    # y is python
    # args is ('xiaow', 20, 'girl')
    
    # 传参时加*与不加*的区别
    # 不加*
    def foo(*args):
        print(args)
        for i in args:
            print(i)
    
    foo(1,2,('a','b'))
    # 运行结果:
    # (1, 2, ('a', 'b'))
    # 1
    # 2
    # ('a', 'b')
    
    # 加*
    def foo(*args):
        print(args)
        for i in args:
            print(i)
    
    foo(1,2,*('a','b'))
    # 运行结果:
    # (1, 2, 'a', 'b')
    # 1
    # 2
    # a
    # b

    **kwargs

    实例(Python3.0+):

    # 传递多个参数
    def foo(**kwargs):
        print(kwargs)
        for i in kwargs:
            print(i)
    
    foo(name='xiaow',age=20)
    # 运行结果:
    # {'name': 'xiaow', 'age': 20}
    # name
    # age
    
    # 传递字典
    def foo(x,y,**kwargs):
        print('x is %s' %x)
        print('y is %s' %y)
        print('kwargs is %s' %kwargs)
    
    dict1={'name':'xiaow','age':20}
    foo('study','python',**dict1)  # 传递字典时,不加**会报错
    # 运行结果:
    # x is study
    # y is python
    # kwargs is {'name': 'xiaow', 'age': 20}  

    六 参数总结

    • 位置参数、关键字参数、默认参数混用时,三者的顺序是:位置参数,关键字参数,默认参数(且默认参数不能传值)
    • args、位置参数、默认参数混用时,三者的顺序是:位置参数、默认参数、*args位置参数、*args、默认参数
    • 位置参数、默认参数、**kwargs混用时,三者的顺序必须是:位置参数、默认参数、**kwargs
    • 位置参数、*args、**kwargs混用时,三者的顺序必须是:位置参数、*args、**kwargs
  • 相关阅读:
    Servlet三种实现方法(四)
    Tomcat 网站部署(三)
    MySQL表的增删改查和列的修改(二)
    Tomcat的目录结构(二)
    addEventListener,attachEvent
    DOM事件流
    函数内部的函数中的this都是指向window
    css3 translate属性
    parent,parents和closest
    each用法
  • 原文地址:https://www.cnblogs.com/lvcm/p/9399856.html
Copyright © 2011-2022 走看看