设为首页 收藏本站
查看: 864|回复: 0

[经验分享] python笔记--自定义函数

[复制链接]

尚未签到

发表于 2018-8-14 11:28:03 | 显示全部楼层 |阅读模式
  函数
  函数是把一些负载的代码封装起来,需要的时候直接调用,重复利用提高效率并且能够简化程序的结构。
  1.语法
  定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数、冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
def functionName(parms1, parms2, ...):  
    code block
  
    return expression
  2.函数的定义与调用
  #定义函数
>>> def func1():  
        print "aaa"
  
        return "bbb"
  注意:在Python交互环境中定义函数时,函数定义结束后需要按两次回车重新回到>>>提示符下。
  #调用函数
>>> a=func1()  
aaa
  
>>> print a
  
bbb
  return作用:结束该语句块,并返回一个值。如果没有return语句或return后面为空,函数执行完毕后也会返回结果,只是结果为None。
  在linux环境下,我们把函数(如func())定义到一个.py文件中了(如test.py),那么,可以在该文件的当前目录下启动Python解释器,用from test import func来导入func()函数,注意test是文件名(不含.py扩展名)。
  3.空函数
  如果想定义一个什么事也不做的空函数,可以用pass语句:
>>>def func2():  
       pass
  pass语句什么都不做,那有什么用?
  实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。pass还可以用在其他语句里,比如:
if age >= 18:  
    pass
  缺少了pass,代码运行就会有语法错误。
  4.函数参数
>>> def func3(name,age):    #括号中的叫形参  
        print (name,age)
  
        return (name,age)
  

  
>>> a=func3('fjc',25)        #括号中的叫实参
  
        ('fjc', 25)
  #参数检测
  一般情况一个形参只能对应一个实参,在调用函数时,如果参数个数不对,Python解释器会自动检查出来,并抛出TypeError错误。
  但是有两种形参可以对应多个实参,即可变参数和关键字参数,例如:
>>> def func4(*name):    #可变参数,有一个*  
        print(name)
  

  
>>> a=func4('zhangsan','lisi')
  
('zhangsan', 'lisi')     #输出结果为一个元组
  

  

  
>>> def func5(**dic):    #关键字参数,有两个*
  
        print(dic)
  
>>> a=func5(zhangsan=12,lisi=15)    #注意实参的格式
  
{'lisi': 15, 'zhangsan': 12}        #输出结果为一个字典
  注意:可变参数和关键字参数同时出现时,可变参数在前,例如:
>>> def func6(*aa,**bb):  
        print aa
  
        print bb
  

  
>>> func6(1,2,3,a=1,b=2,c=3)
  
(1, 2, 3)
  
{'a': 1, 'c': 3, 'b': 2
  如果,需要将已经定义的列表或元组、字典使用函数调用,需要在列表或元组前加一个*,在字典前加两个*,例如:
>>> lis=[1,2,3]  
>>> dic={'a':1,'b':2}
  
>>> a=[1,2,3]
  
>>> b={'a':1,'b':2,'c':3}
  
>>> def func7(*lis,**dic):
  
        print (lis,dic)
  

  
>>> func7(*a,**b)    #a前加一个*,b前加两个*
  
((1, 2, 3), {'a': 1, 'c': 3, 'b': 2})
  #默认参数
>>> def func8(name,age=18):    #注意:默认参数只能放在形参的最后一个  
        print (name,age)
  
>>> func8('zhangsan')
  
('zhangsan', 18)
  #在调用函数时,实参不按顺序写,例如:
>>> func8(age=25,name='fjc')    #使用“形参=实参”的方式  
('fjc', 25)
  5.递归函数
  在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。例如:
  #计算阶乘
>>> def func9(n):  
        if n==1:
  
        return n
  
    return n*func9(n-1)
  

  
>>> func9(4)
  
24
  验算的过程如下:
  4*func9(3)==>
  4*3*func9(2)==>
  4*3*2*func9(1)==>
  4*3*2*1
  递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
  练习:
  1. 斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。
  随便输入两个数,生成类似的斐波那契数列。
#!/usr/bin/env python  
def func (*number):
  
    lis=[first,second]
  
    for i in range(10):
  
        lis1=list(reversed(lis))
  
        lest=lis1[0]+lis1[1]
  
        lis.append(lest)
  
    print(lis)
  
first=input("please input the first number:")
  
second=input("please input the second number:")
  
a=func(first,second)
  #这个简单程序能够实现:在交互式模式随便输入两个数字,以这两个数字为基,输出斐波那契数列。
  3. 输出 9*9 乘法口诀表
#!/usr/bin/env python  
def func(n,m):
  
    for x in range(1,10):
  
        for y in range(1,x+1):
  
            print "%d*%d=%d\t"%(x,y,x*y),
  
        print ""
  
func(1,10)
  或者:
#!/usr/bin/env python  
def func(n,m):
  
    for x in range(n,m):
  
        for y in range(n,m):
  
            if x>=y:    #设为x<=y,是另一种效果
  
                print"%d*%d=%d\t"%(x,y,x*y),
  
            else:
  
                continue
  
        print ""
  
a=func(1,10)
  5. 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
#!/usr/bin/env python  
def func(a,b,c,d):
  
    f=0
  
    for x in (a,b,c,d):
  
        for y in (a,b,c,d):
  
            for z in (a,b,c,d):
  
                if x!=y and x!=z and z!=y:
  
                    print "%d%d%d"%(x,y,z)
  
                    f+=1
  
    print "total:%d"%f
  
func(1,2,3,4)
  6. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
#!/usr/bin/env python  
def func(n,m):
  
    x=[]
  
    for i in range (1,m+1):
  
         x.append(int("%d"%n*i))
  
    print sum(x)
  
n=input("number:")
  
m=input("total:")
  
func(n,m)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-551584-1-1.html 上篇帖子: 利用python进行数据分析——histogram 下篇帖子: Python 多进程 多线程数据共享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表