像计算机科学家一样学习python(2)

函数

Python学习笔记-像计算机科学家一样学习python(2)

函数

int将浮点数转化为整数,直接舍弃小数部分。

句点表示法(dot notation):同时指定模块名称和函数名称 。

函数体里的语句并不会立即运行,而是等到函数被调用时才执行。但是函数的定义必须先于首次调用执行。

形参(parameter)是在函数定义之中的,实参(argument)则是调用函数时传入的。形参也是局部的。

栈图(stack diagram)

课后练习

3-1

Python
def right_justify(s):
    a = ' '
    while len(s) < 70:
        s =  a + s
    print (len(s))    
    print (s)

right_justify('sss')

3-2

参考答案

Python
#1
def do_twice(f):
    f()
    f()
def print_spam():
    print('spam')
do_twice(print_spam)

#2
def do_twice(f,a):
    f(a)
    f(a)
def print_spam(b):
    print(b)
do_twice(print_spam,'spam')

#3
def do_twice(f,a):
    f(a)
    f(a)
def print_spam(b):
    print(b)
def do_four(f,c):
    do_twice(f,c)
    do_twice(f,c)
do_four(print_spam,'spam')

#4 参考答案
def print_twice(arg):
    """Prints the argument twice.

    arg: anything printable
    """
    print(arg)
    print(arg)


def do_four(func, arg):
    """Runs a function four times.

    func: function object
    arg: argument passed to the function
    """
    do_twice(func, arg)
    do_twice(func, arg)


do_twice(print_twice, 'spam')
print('')

do_four(print_twice, 'spam')

3-3

Python
def do_four(f):
    f()
    f()
    f()
    f()
def print_excel(arg1,arg2):
    print(arg1+' ',4*(arg2+' '),arg1+' ',4*(arg2+' '),arg1+' ',sep='')
print_excel('+','-')
do_four(print_excel('|',' '))
# TypeError: 'NoneType' object is not callable
# 原因是因为本来传入do_four的应该是一个函数,但是我最后传进去的则是一个执行完毕的void function,相当于传了个None进去。修改如下:
def do_four(f,arg1,arg2):
    f(arg1,arg2)
    f(arg1,arg2)
    f(arg1,arg2)
    f(arg1,arg2)
def print_excel(arg1,arg2):
    print(arg1+' ',4*(arg2+' '),arg1+' ',4*(arg2+' '),arg1+' ',sep='')
print_excel('+','-')
do_four(print_excel,'|',' ')
print_excel('+','-')
do_four(print_excel,'|',' ')
print_excel('+','-')

最后编辑于
文章链接: http://pheustal.com/2019/12-03/thinkpython2
本作品采用CC-BY-SA许可。