python学习第五天——函数(重点)

目前不清楚函数和方法是不是一个概念,python的函数写法和java除了格式(冒号缩进这些)有区别外,定义和参数上区别很大

python中函数的概念很重要

  • 函数定义
def say_hello():
    # 属于该函数的语句块
    print('hello world')
# 函数结束

say_hello()  # 调用函数

说明:使用关键字def 定义,冒号结尾,函数名均用小写字母,用下划线不要用驼峰,语句块要缩进,两个函数之间尽量空两行

  • 参数
def func_name(para1, para2)

说明:形参和实参概念不变,不需要指定类型,左括号后,右括号前不要空格

  • 局部变量和全局变量
x = 50

def func(x):
    print(x)
    x = 2
    print( x)

func(x)
print(x)
输出:50,2,50

说明:局部变量作用域和java相同,只在函数内部

x = 50

def func():
    global x

    print(x)
    x = 2
    print(x)

func()
print(x)
输出:50,2,2

说明:如果想在函数内部对函数外的变量赋值,需要声明为global变量,称为全局变量或顶级变量,可同时声明多个全局变量,如global x,y,z

  • 默认参数值
def say(message, times=1):
    print(message * times)

say('Hello')
say('World', 5)

说明:形参指定默认参数值时,值必须是常数;= 号前后都不要留空格;这个形参必须在未指定默认值的形参之后,错误示例:def func(a=5,b)

  • 关键字参数
def func(a, b=5, c=10):
    print(a, b, c)

func(3, 7)
func(25, c=24)
func(c=50, a=100)

说明:这样调用时可以不关注参数位置,而是通过参数名(关键字)指定实参

  • 可变参数
def total(a=5, *numbers, **phonebook):
    print('a', a)

    # 遍历元组中的所有项
    for e in numbers:
        print('e', e)

    # 遍历字典中的所有项
    for first, second in phonebook.items():
        print(first,second)

print(total(10,1,2,3,Jack=1123,John=2231,Inge=1560))

说明:

我们在java规约中,强调要避免使用可变参数

python中,当声明了带*号的参数  *param时,从这个参数开始后的所有参数都会被收集进入一个名为param的元组

     当声明了带**的参数 **param时,从这个参数开始,所有参数都会被收集进入一个名为param的字典

python会自动判断值所属的类型,收集从哪个入数开始,到哪个入参结束

  • return
def maximum(x, y):
    if x > y:
        return x
    elif x == y:
        return 'equal'
    else:
        return y

print(maximum(2, 3))

说明:

遇到return语句,立即跳出函数;

没有返回值的语句(return)等价于return None (python中的None和java中的null的地位稍有区别);

如果函数没有return语句,系统会自己在函数结尾添加return None语句;

  • pass
def func():
    pass

print(func())

说明:pass表示一个空语句块,通常用于占位,上述输出结果为:None

  • DocStrings
def max(x, y):
    '''Prints the maximum of two numbers.

    The two values must be integers.'''
    # 如果有必要,将参数转为整数
    x = int(x)
    y = int(y)

    if x > y:
        print(x)
    else:
        print(y)

print_max(3, 5)
print(print_max.__doc__)

说明:DocStrings是文档字符串,各个规约中,很看中文档字符串这部分的编写,在非平凡函数(行数较多,或逻辑较复杂的)中强烈建议加上

编写规则:函数的首行首字母大写,句号结尾;第二行为空行;第三行及其以后为具体描述;前后用三引号;

通过   __doc__属性来访问函数的DocStrings,之所以说属性,前面讲了,一切皆对象,函数也是对象,对象有属性,__doc__就是函数的其中一个属性,和js相近


以上,介绍的都是函数的基本的语法和规则,具体的还需要多练

原文地址:https://www.cnblogs.com/yb38156/p/12492375.html