Python学习笔记——week_2

第三章 函数

函数的目的:简化重复运算。

1. 自定义函数

自定义一个求值函数:

def f(x):
    f=x^2+3*x+2
    print(f)

可以得到:f(2)=8

等价的返回值return语句:

def f(x):
    f=x^2+3*x+2
    return f

PS:函数调用求值的结果就是“返回值”;在自定义函数中可以用return语句指定“返回值”。

2. None值

含义:表示没有值(类似于null)
作用:在没有设定return返回值时,其默认返回值为None

3.关键词参数

以print()函数为例:
print(value,sep=’ ‘,end=’\n’)

关键词调用
value打印value的取值
sep在values之间插入字符串,默认为空格
end在最后的value之后添加字符串,默认为换行符(\n)

4.局部和全局作用域

规则: 1. 局部变量不能在全局作用域内使用
2.局部作用域不能使用其他局部作用域内的变量
3.全局变量可以在局部作用域内调用
4.不同局部变量名、局部和全局变量名可同名(影响人为识别,建议避免)

PS:在离开函数内的局部作用域之后,除返回值外,其他变量的取值都会被销毁。

5.global语句

作用:可以将函数类的局部变量修改为全局变量
例:

def spam():
    eggs='spam' #局部变量eggs的取值为spam
    print(eggs)
eggs='big'  #全局变量eggs的取值为big
spam()  #调用自定义函数spam():打印局部变量eggs的取值
print(eggs) #打印全局变量eggs 

结果为:
spam
big

global语句使用:

def spam():
    global eggs  #转化eggs为全局变量
    eggs='spam' #变量eggs的取值为spam
    print(eggs)
eggs='big'  #全局变量eggs的取值为big
spam()  #调用自定义函数spam():打印局部变量eggs的取值
print(eggs) #打印全局变量eggs    

结果为:
spam
spam

6.异常处理

对于可能发生错误的程序可以使用try和except语句来处理,可能出现错误的语句放在try语句中,在except语句中写入当错误发生时需要进行的处理

#在函数模块中调用
def f(x):
    try:
        f=36/x
        return f
    except ZeroDivisionError:
        print('invalid argument')
print(f(1))
print(f(0))
print(f(3))
#在语句块中调用
def g(x):
    return 36/x
try:
    print(g(1))
    print(g(0))
    print(g(3))
except ZeroDivisionError:
    print('invalid argument')

上例中在语句块中的*print(g(3))*语句未执行,说明一旦运行except的代码,就不会在运行try语句中的代码。

PS:(1).ZeroDivisionError是Python本身定义的一个错误,表示试图用一个数除以0
(2).None的数据类型为NoneType

7.实践

题目:编写一个名为collatz()的函数,有参数x。如果参数x是偶数则collatz(x)=x//2;如果参数x是奇数,则collatz(x)=3x+1;
然后编写一个程序,让用户输入一个非零数,并对这个数不断调用f(),直到函数返回值为1.

def collatz(x):
    if x%2==0:    
        return x//2
    elif x%2==1:  
        return 3*x+1
    else:
        print('number is invalid')
print('please enter a non-zero number')
try:
    x=int(input())
    while True:
        print(collatz(x))
        x=collatz(x)     
        if x==1:
            break
except ValueError:
    print('Please enter an integer')
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值