python简明教程学习笔记 函数

    函数(Functions)是指可重复使用的程序片段。它们允许你为某个代码块赋予名字,允许你通过这一特殊的名字在你的程序任何地方来运行代码块,并可重复任何次数。这就是所谓的调用(Calling)函数。range等等都是函数。

1.关键字

    函数可以通过关键字 def 来定义。这一关键字后跟一个函数的标识符名称,再跟一对圆括号,其中可以包括一些变量的名称,再以冒号结尾,结束这一行。随后而来的语句块是函数的一部分,也就是函数体。

def hello():
    print('Hello World!')

hello()

2.函数参数&局部变量

    对于python中的函数参数,在定义函数时仍叫做“形参”,调用函数时仍叫做“实参”。同样的,在函数中所定义的变量只对这部分函数生效(除非特别规定)即使他们和你在主函数中定义的变量名字相同也一样。这样的变量便成为局部变量,它的作用域就只有函数这一块。

def swap(i, j):
    box = 0
    box = i
    i = j
    j = box
    print("在函数中")
    print(i)
    print(j)

i = 2
j = 3
print("传递之前")
print(i)
print(j)
swap(i, j)
print("传递之后")
print(i)
print(j)

3.global语句

    同样的,如果你想像C那样在函数中对某个值进行更改,我们可以使用全局变量这个东西,只不过它的声明变成了“global”,虽然我强烈地不建议你这么做,尤其在一个很大的项目之中,就像我在程序设计实践中提到的那样。

x = 59
def change():
    global x
    print("函数中未更改的值", x)
    x = 0
    print("函数中更改的值", x)

change()
print(x)

    global 语句用以声明 x 是一个全局变量——因此,当我们在函数中为 x 进行赋值时,这一改动将影响到我们在主代码块中使用的 x 的值。

4.默认参数值

    对于一些函数来说,你可能为希望使一些参数可选并使用默认的值,以避免用户不想为他们提供值的情况。默认参数值可以有效帮助解决这一情况。你可以通过在函数定义时附加一个赋值运算符(= ) 来为参数指定默认参数值。确切的说,默认参数值应该是不可变的,我们不应该指定一个可变的量作为默认的参数值。例子如下所示:

def hello(para, num = 3):
    print(para * num)

hello('world')

    当然,我们也可以将一个函数中的某些值设置为默认值,其他的一些值要求用户进行输入。在输入关键参数之后,你可以选择输入或者不输入那些拥有默认参数的变量。

def func(a, b=5, c=10):
    print('a is', a, 'and b is', b, 'and c is', c)
func(3, 7)
func(25, c=24)
func(c=50, a=100)

5.可变参数

    有时你可能想定义的函数里面能够有任意数量的变量,也就是参数数量是可变的,这可以通过使用星号来实现。当然,这不是C或者C++中那个引用/解引用的那个*。

    在python中,我们一般使用两种情况的可变参数,其中一种使用一个“*”,并被称为元组(Tuple);另一种使用两个“**”,并被称为字典(Dictionary),二者的引用方式有所不同。

    对于*来说,一般引用单个的数字,并以组的形式储存;对于**来说,引用的形式为字典,要求参数输入时的格式为:key_0=key_value_0, key_1=key_value_1...。二者可以很好的被区分出来,就像下面那样

def total(a=5, *numbers, **phonebooks):
    print('a', a)
    for single_item in numbers:
        print('single_item', single_item)
    for first_part, second_part in phonebooks.items():
        print(first_part,second_part)
print(total(10,1,2,3,4,Jack=1123,John=2231,Inge=1560))

    要注意的是,我们可以写成这样

def total(a=5, *numbers, **phonebooks):

    这样

def total(a=5, *numbers):

    这样

def total(a=5, **phonebooks):

    但是不能这样

def total(a=5, **phonebooks, *numbers):

    也不能这样

def total(a=5, *numbers, **phonebooks, *try_num):

6.return语句

    对于return来讲,多数都在起到终止函数或者返回得到的数值,当return后不接参数时,将会默认return返回的是None

7.文档字符串

    文档字符串又叫做DocStrings,它是一款你应当使用的重要工具,它能够帮助你更好地记录程序并让其更加易于理解。令人惊叹的是,当程序实际运行时,我们甚至可以通过一个函数来获取文档。

    我们一般在函数的开头书写一段多行字符串(使用'''...'''操作方法),对于这一多行字符串,我们一般规定为:第一行以某一大写字母开始,以句号结束。第二行为空行,后跟的第三行开始是任何详细的解释说明。在此,我们强烈建议在你所有重要功能的所有文档字符串中都遵循这一约定。

    我们可以简单的采取函数的__doc__属性来获取函数中的提示信息,而且这个程序是完全自动化操作的。例如下面这个:

def print_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, 'is maximum')
    else:
        print(y, 'is maximum')
print_max(3, 5)
print(print_max.__doc__)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值