爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 13706|回复: 7

[参考资料] Python基础07 函数

[复制链接]

新浪微博达人勋

发表于 2012-6-1 10:44:11 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
原文地址,欢迎订阅:
http://www.cnblogs.com/vamei/archive/2012/06/01/2529500.html

Python基础07 函数

函数最重要的目的是方便我们重复使用相同的一段程序。

将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句。

首先,我们要定义一个函数, 以说明这个函数的功能。

def square_sum(a,b):
    c = a**2 + b**2
    return c

这个函数的功能是求两个数的平方和。

首先,def,这个关键字通知python:我在定义一个函数。square_sum是函数名。

括号中的a, b是函数的参数,是对函数的输入。参数可以有多个,也可以完全没有(但括号要保留)。

我们已经在循环和选择中见过冒号和缩进来表示的隶属关系。

c = a**2 + b**2    # 这一句是函数内部进行的运算

return c               #返回c的值,也就是输出的功能。Python的函数允许不返回值,也就是不用return。

return可以返回多个值,以逗号分隔。相当于返回一个tuple(定值表)。

return a,b,c         #相当于 return (a,b,c)



定义过函数后,就可以在后面程序中使用这一函数

print square_sum(3,4)

Python通过位置,知道3对应的是函数定义中的第一个参数a, 4对应第二个参数b,然后把参数传递给函数square_sum。

(Python有丰富的参数传递方式,还有关键字传递、表传递、字典传递等,基础教程将只涉及位置传递)

函数经过运算,返回值25, 这个25被print打印出来。



我们再看下面两个例子
复制代码

a = 1

def change_integer(a):
    a = a + 1
    return a

print change_integer(a)
print a

#===(Python中 "#" 后面跟的内容是注释,不执行 )

b = [1,2,3]

def change_list(b):
    b[0] = b + 1
    return b

print change_integer(b)
print b

复制代码

第一个例子,我们将一个整数变量传递给函数,函数对它进行操作,但原整数变量a不发生变化。

第二个例子,我们将一个表传递给函数,函数进行操作,原来的表b发生变化。

对于基本数据类型的变量,变量传递给函数后,函数会在内存中复制一个新的变量,从而不影响原来的变量。(我们称此为值传递)

但是对于表来说,表传递给函数的是一个指针,指针指向序列在内存中的位置,在函数中对表的操作将在原有内存中进行,从而影响原有变量。 (我们称此为指针传递)



总结:

def function_name(a,b,c):
    statement
    return something  # return不是必须的

通过位置,传递函数。

基本数据类型:值传递

表:指针传递



练习:

写一个判断闰年的函数,参数为年、月、日。若是是闰年,返回True

本帖被以下淘专辑推荐:

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-6-1 11:05:51 | 显示全部楼层
版主的系列教程很不错,Python是很好的脚本语言,MeteoInfo使用了IronPython(Python语言的一个分支,可以支持.Net)来实现脚本功能,有Python的基础写MeteoInfo的脚本就比较轻松了。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-6-1 11:39:54 | 显示全部楼层

我准备做一个基于Python的WRF控制端(其实已经写了不少控制程序了)。希望通过这个教程,能让有兴趣的人掌握基础,然后可以从共同开发中积累经验。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-6-1 16:40:32 | 显示全部楼层
跟进提问

b = [1,2,3]

def change_list(b):
    b[0] = b + 1
    return b

print change_integer(b)
print b


下面的 change_integer 是不是写错了呢,应该跟上面的list一致吧

还有一个   b[0] = b + 1
这个没办法通过  左边是一个数,右边是一个连表  个人感觉可能是笔误吧   

请楼主指点
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-6-1 19:35:15 | 显示全部楼层
个人感觉没理解tom的意思  
随便写了个判断的  那个none没有明白 为啥会出来这个

请tom指正

QQ截图20120601193515.jpg


密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-3-17 08:33:40 | 显示全部楼层
topmad 发表于 2012-6-1 19:35
个人感觉没理解tom的意思  
随便写了个判断的  那个none没有明白 为啥会出来这个

来凑个热闹。我觉得可能是因为定义的函数中,已经使用print,在后面的循环中,在使用print打印函数的结果就会出现打印为空的现象。
直接调用函数即可
  1. def judge(year):

  2.     if year % 4 == 0 and (year % 100 != 0 or year % 400 == 0):
  3.         print(year, 'is a leap year')
  4.     else:
  5.         print(year, 'negative')


  6. for year in range(1960, 2021):
  7.     judge(year)
复制代码


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-3-17 10:36:15 | 显示全部楼层
wet510 发表于 2020-3-17 08:33
来凑个热闹。我觉得可能是因为定义的函数中,已经使用print,在后面的循环中,在使用print打印函数的结果 ...

又见老同学... 挖坟贴啊
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-3-18 08:23:57 | 显示全部楼层
topmad 发表于 2020-3-17 10:36
又见老同学... 挖坟贴啊

之前没看到,看到好基友,得来露个脸
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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