python-认识(第五段-函数)

本文详细介绍了Python中的函数使用,包括函数的定义、调用及参数类型:默认值参数、名称传递参数、可变参数。同时讲解了返回多个值的方法,并举例说明了如何找到2~100的素数、孪生素数以及分解偶数。此外,还探讨了变量的作用域,以及lambda函数、filter()和sorted()的用法。
摘要由CSDN通过智能技术生成

       

目录

1、函数的定义和调用

(1)函数的参数

①默认值参数

②名称传递参数

③可变参数

④形参与实参的讨论

(2)返回多个值

2、函数使用

3、变量的作用域


        函数像一个黑盒子,不需要了解其内部的原理,只需要了解接口或使用方法即可。

例如:

(1)之前遇到的 abs()函数 ,功能是对一个浮点数取绝对值操作、len()函数等内置函数。

(2)标准库函数:math、random,通过import语句导入。

(3)第三方库函数,jieba、numpy、request,通过import导入

(4)用户自定义函数。

1、函数的定义和调用

定义语法格式:

del 函数名([参数列表)]:

        函数体

调用函数的格式:

函数名([实参列表])

        函数体return语句可以有多条,但第一条return执行之后,函数就立即终止。

        实参列表必须和形参列表一一对应。


(1)函数的参数

①默认值参数

        在声明函数时,为参数指定默认值。调用函数时,没有传入对应的实参,则函数使用声明时指定的默认参数值。注意:默认值参数必须写在形参列表右侧。

def babble(words,times=1):
    print((words+' ')*times)

babble('hello',3)
babble('world')

②名称传递参数

        按照位置传递的参数称为位置参数,也可以通过名称指定传入的参数,称为名称参数。

特点:参数意义明确、与位置无关,可以指定某个参数值。

>>> def mys(mid_score,end_score,rate=0.4):
    score=mid_score*rate+end_score*(1-rate)
    return score

>>> print(mys(88,93))
91.0
>>> print(mys(rate=0.5,end_score=93,mid_score=88))
90.5

③可变参数

        在定义函数的时候,使用带星号的参数,如*param1,则意味着允许向函数传递可变量的参数,在调用函数时,从该参数之后所有参数都被收集为一个 元组

        如果带有两个星号,如**param2,则收集为一个 字典

def n(*c):
    print(type(c))
    for i in c:
        print('{:^4}'.format(i),end=' ')
    return len(c)

count=n('TOM','JAY','SIRI')
print()
def q(**d):
    print(type(d))
    total=0
    print(d)
    for key in d:
        total+=d[key]
    return total

print(q(male=5,female=12))

<class 'tuple'>
TOM  JAY  SIRI 
<class 'dict'>
{'male': 5, 'female': 12}
17

④形参与实参的讨论

        思考:学习Java后,我们知道仅仅在函数体内修改形参的值,并不会影响到实参,那么在Python也是这样吗??

        对于像列表、字典这两个可变对象而言,修改形参会影响到实参,其他的并不会影响。

def add1(money,rate):
    money=money*(1+rate)
rate=0.05
amount=1200
add1(amount,rate)
print("amount:",amount)

def add2(money,rate):
    for i in range(len(money)):
        money[i]=money[i]*(1+rate)
rate=0.05
amount=[1200,1400,800,650,1600]
add2(amount,rate)
print("amount:",amount)

amount: 1200
amount: [1260.0, 1470.0, 840.0, 682.5, 1680.0]


(2)返回多个值

        如果return返回多个值,则可以返回一个元组。

def fun(a,b):
    return(a,b,a//b,a%b)
n1,n2,m,d=fun(6,4)
print('两个整数是:{}和{}'.format(n1,n2))
print('商是:',m)
print('余数:',d)

两个整数是:6和4
商是: 1
余数: 2


例子:

(1)找出2~100中的所有素数

def prime(n):
    for i in range(2,n):
        if n%i==0:
            return False
    else:
        return True #参考教材p52
for i in range(2,100):
    if prime(i)==True:
        print('{:^4}'.format(i),end='')

(2)找出2~100的孪生素数,即相差为2的素数对,如:3和5,5和7

def prime(n):
    for i in range(2,n):
        if n%i==0:
            return False
    else:
        return True
for i in range(2,100):
    if prime(i)==True and prime(i+2)==True:
        print('({:^4},{:^4})'.format(i,i+2))

(3)将4~20所有偶数分解成两个素数的和,如4=2+2,6=3+3,10=3+7

def prime(n):
    for i in range(2,n):
        if n%i==0:
            return False
    else:
        return True
for i in range(4,20+1,2):
    for j in range(2,i):
        if prime(j) ==True and prime(i-j) ==True:
          print('({:^4}={:^4}+{:^4})'.format(i,j,i-j))
          break

2、函数使用

        lambda()函数实际上生成一个函数对象,即匿名函数。

语法格式:

lambda 参数1,参数2,···:<函数语句>

>>> f=lambda x,y:x*y
>>> type(f)
<class 'function'>
>>> f(12,2)
24

        filter()函数用于过滤序列,接收两个参数:第一个为函数,第二个为序列。序列中每个元素作为参数传递给函数,然后返回true/false,最后将返回true的函数存到新列表中。

>>> f=lambda x:x<0
>>> list=[3,5,-7,-2,3,-9]
>>> for i in filter(f,list):
    print(i)

        sorted()函数用于排序,生成一个新的列表;sort()则会改变原先的列表。

        字典的items()方法能以(键,值)的形式返回所有条目。

dict={'计2003':33,'计2002':28,'计2004':34}
print(sorted(dict))
print(sorted(dict.items()))
print(sorted(dict.items(),key=lambda x:x[1]))
print(sorted(dict.items(),key=lambda x:x[1]%10))

['计2002', '计2003', '计2004']
[('计2002', 28), ('计2003', 33), ('计2004', 34)]
[('计2002', 28), ('计2003', 33), ('计2004', 34)]
[('计2003', 33), ('计2004', 34), ('计2002', 28)]


3、变量的作用域

        全局变量和局部变量的区分基本照应C、JAVA。

        当在函数内访问全局变量时,要使用关键字 global 即可。此时就相当于访问全局变量了,再修改变量将会影响全局变量!、

def f():
    global x
    print(x)
    x=5        #此时修改了全局变量的值
    print('f内部:x=',x)
    return x*x
x=10
print('f()=',f())
print('f外部:x=',x)

10
f内部:x= 5
f()= 25
f外部:x= 5

————————————————————————下一段 文件与异常

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值