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

[经验分享] 二、python 函数

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-1 11:08:24 | 显示全部楼层 |阅读模式
  1.定义函数



def  max(x,y):
  if x>y:
   return x
  else:
    return y
  如果定义空函数(函数还没想好怎么编写,只是为了让整个代码能够运行起来)



def max(x,y):
  pass
  2.函数的参数
  2.1可变参数
  顾名思义参数是可变的,既可以是1个参数,也可以是多个参数
  例:请计算a^2+ b^2 + c^2 + ……,其中a,b,c.....个数不确定,所以我们将参数用一个list或tuple传进去



def calc(numbers):
  sum =0
  for i in numbers:
    sum = sum + i*i
  return sum
  调用时
  calc([1,2,3])  #list作为输入,输出为14
  calc((1,2,4))  #tuple作为输入,输出为21
  如果想将list或者tuple的参数,改为可变参数,代码如下:



def calc(*numbers):  #只需要在numbers前面加*
  sum =0
  for i in numbers:
    sum = sum + i*i
  return sum
  调用时 calc(1,2,3)   #输出14
  与前面的定义只是多了个*,可变参数numbers在函数内封装成tuple类型。
  也可以先组建一个list,num=[1,9,10,4] ,再把list参数作为可变参数传进去,此时运用可变参数调用时,需要这么写calc(*num)
  或者 calc(num[0],num[1],num[2],num[3])  
  
  2.2关键字参数
  关键字参数,在函数内部封装成dict类型,定义时会用**标记
  例如:



def one(name,sex,**kw):
  print 'name:',name,'sex:',sex,'other:',kw      #  ,  表示输出一个空格,注:python的单引号与双引号使用没什么区别。
  小技巧:str='my name is "boy" '   或者   str="my name is 'boy' "
  调用时:
  one(Tom,boy,city='beijing')    输出为name: Tom sex: boy others: {'city':'beijing'}
  one(Tom,boy,city='beijing',job='teacher')  输出    name: Tom sex: boy others: {'city':'beijing','job':'teacher'}
  和可变参数类似,也可以先组建一个dict,再把dict转换为关键字参数传进去,例:
  dict={'city':'beijing','job':'teacher'}  调用时用法为one(Tom,boy,**dict); 或者  one(Tom,boy,city=dict['city'],job=dict['job'])
  3.递归函数
  3.1递归举例
  例子,计算n!



def fact(n):
  if n =0:
    return 1
  return n*fact(n-1)
  递归函数的优点是定义简单,逻辑清晰,但是容易出现栈溢出,在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减少一层栈帧,由于栈的大小不是无限的,所以递归次数过多,会导致栈溢出
  3.2尾递归优化递归函数
   目的是为了防止栈溢出



def  fact(n):
  return fact_iter(1,1,n)
def fact_iter(pro,count,max):
  if count>max :
    return pro
  return fact_iter(pro*count,count+1,max)
  尾递归调用时,如果做了优化,栈不会增长,因此,无论多少次调用也不会导致栈溢出。遗憾的是,大多数编程语言没有针对尾递归做优化,python解释器也没有做优化,所以,即使上面的fact(n)函数改成尾递归方式,也会导致栈溢出。

运维网声明 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-145796-1-1.html 上篇帖子: split function of Perl,Python,Awk 下篇帖子: Python文件读取编码错误问题解决之(PyCharm开发工具默认设置的坑。。。)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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