Python函数篇

函数是重用的程序选, 他们允许给一块语句一个名称,然后可以在你的程序的任何地方是使用这个名称任意多次地运行这个语句块。这个就被称为 调用  函数。比如内建了很多高效的函数 如len 和range

函数通过def关键字来定义 def后面跟一个函数的标识符 名称 然后再跟一个括号,括号之中可以包括一些变量名,该行以冒号结尾:接下来就是一块语句 也就是所谓的函数体

def sayHello():
print "hello world!" sayHello()

函数形参

函数形参取得的值就是你提供给函数的值,这样可以利用这些值做一些事情,这些参数像变量一样只不过他们的值是在我们调用函数的时候定义而非函数本身内赋值

参数是在函数定义的圆括号内指定, 用逗号分隔 当我们调用函数的时候,需要以同样的方式提供值

注意:函数中的参数名称为形参, 而你提供的函数调用的值成为实参

def printMax(a,b):  #a b 就是形参
if a>b:
print a,"is maximum"
else:
print b,"is maximum" printMax(3,4) #23 4 就是实参 x=5
y=7 printMax(x,y) #x y 就是实参

局部变量

局部变量就是在函数定义内声明变量的时候 他们与函数外具有同样的其他变量没有任何关系,即变量名称对函数来说是局部的 这成为变量的作用域 所有变量的作用域是他们被定义的快, 从他们的名称被定义的那点开始

def func(x):
print "x is ",x
x=2
print "change local x to",x # 这个x的值为2 就是局部变量 只能在函数里面进行使用 x=50
func(x)
print "x is still",x #而这个X定义的值为50 是在函数外部的 所以被称为全局变量

使用global语句

如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局
的。我们使用 global 语句完成这一功能。没有 global 语句,是不可能为定义在函数外的变量赋值的。

def func():
global x
print "x is ", x
x=2
print "change the locak to ",x x=50
func()
print"value of x is ",x

定义变量的时候需要使用关键字global进行定义 上述代码中使用global定义的X 为2(尽管是在函数体内定义但是依旧是全局变量可以在函数体外继续使用)所以最后打印出来的数值为2

Python中有一个比较方便的参数方法就是默认参数值, 有的时候我们在申明函数的时候 在传入实参的时候不想每个参数都赋值 所以这个时候就可以使用默认参数值。你可以在函数定义的形参名后加上赋值运算符(=)和默认值,从而给形参指定默认参数值

def say(message, times = 1):
print message * times say("hello")
say("world",5)

通过say函数(定义了两个形参,定义了一个默认参数值) 

在调用的时候之提供hello实参给message 而没有传入time的形参 所以调用的时候默认使用1 所一直打印hello

而下一行则提供了两个形参 得到了5次world的输出

注意: 理论来讲默认参数值应该是一个参数 更加准确的来将该值应该不能够变动即不可变

关键参数

如果你的函数有许多参数 而你只想指定其中某一个或者某几个参数, 那么你可以通过命名来为这些参数赋值, 这杯称为关键参数

这有两个优势: 由于我们不必担心参数的顺序 使用函数变得更加简单 ; 另外假设其他参数都有默认值 我们可以只给我们需要的那些参数赋值

def func(a, b=5,c=10):  # b c 就是定义了默认值参数
print " a is ",a,"and b is ",b,"and c is ",c func(3,7)
func(25,c=24)
func(c=50,a=100)

输出结果:

======================== RESTART: C:/Python27/func.py ========================
a is 3 and b is 7 and c is 10
a is 25 and b is 5 and c is 24
a is 100 and b is 5 and c is 50
>>>

我们可以看到如果我们不指定具体的参数的时候 系统默认是跟形参所匹配的, 即a=3 b=7 c 使用默认值为10

func(25,c=24)  把25传给了形参a b使用默认的参数5 c使用实参值

func(c=50,a=100) 注意这个顺序 我们可以自由定义这个顺序的,这个跟其他的语言有很大的区别的,这也是改语言的方便之处。

Return语句

return 语句是从一个函数返回 及跳出函数,我们也可选从函数返回一个值

def maximum(x,y):
if x>y:
return x
else:
return y
print maximum(2,3) 运行结果后出现的值为3 , 传入2 和3给 x 和y 然后运行if else 语句return Y值为3

这里需要提醒一点的是python中的return, 没有返回值的return语句等价于return none。 none在python中表示没有任何东西的特殊类型 例如 如果一个变量的值为None 可以表示他没有值

除非你提供你自己的return语句 每个函数的结尾都暗含return none, 通过下面一个函数我们就可以明白一点。

def maximum(x,y):
if x>y:
return x
elif x == y:
return x+y
else:
return y print maximum(3,10)

======================== RESTART: C:/Python27/func.py ========================

>>>

程序返回值为 10  

如果我们把最后一个else的执行语句改成print y 结果会如下:

======================== RESTART: C:/Python27/func.py ========================

None
>>>

默认会在没有使用return的时候 执行了隐藏的return none 语句

DocString

Python有一个很奇妙的特性,称为 文档字符串 ,它通常被简称为 docstrings 。DocStrings是一个重要
的工具,由于它帮助你的程序文档更加简单易懂,你应该尽量使用它。你甚至可以在程序运行的时候,从
函数恢复文档字符串!

 def printMax(x,y):
""" Prints the maximum of two numbers. The two values must be intergers."""
x= int(x)
y=int(y) if x>y:
print x, "is maximum"
else:
print y,"is maximum" printMax(3,5)
print printMax.__doc__ help(printMax)

在函数的第一个逻辑行的字符串是这个函数的 文档字符串 。注意,DocStrings也适用于模块和类。

文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开
始是详细的描述。 强烈建议 你在你的函数中使用文档字符串时遵循这个惯例。
你可以使用 __doc__ (注意双下划线)调用 printMax 函数的文档字符串属性(属于函数的名称)。请
记住Python把 每一样东西 都作为对象,包括这个函数。我们会在后面的类一章学习更多关于对象的知
识。
如果你已经在Python中使用过 help() ,那么你已经看到过DocStings的使用了!它所做的只是抓取函数
的 __doc__ 属性,然后整洁地展示给你。你可以对上面这个函数尝试一下——只是在你的程序中包
括 help(printMax) 。记住按q退出 help 。
自动化工具也可以以同样的方式从你的程序中提取文档。因此,我 强烈建议 你对你所写的任何正式函数编
写文档字符串。随你的Python发行版附带的pydoc命令,与 help() 类似地使用DocStrings。

===================== RESTART: C:\Python27\DocString.py =====================
5 is maximum
Prints the maximum of two numbers.

The two values must be intergers.
Help on function printMax in module __main__:

printMax(x, y)
Prints the maximum of two numbers.

The two values must be intergers.

>>>

  

Python基础学习1---函数的更多相关文章

  1. python基础学习2 函数变量与赋值

    学习的第一步,就是通常的输出函数:print() 1.基础主要学习了变量的赋值,变量名可以疑字母.数字.下划线(_)进行命名,但是不能以数字开头 变量的赋值:变量名 = 变量值 2.模块的导入,和调用 ...

  2. python基础学习Day10 函数形参的动态参数、*args **kwargs 命名空间 global 与 nonlocal

    一.函数形参的动态参数 原因:为了拓展,对于实参数量不固定,故需要万能参数,即动态参数, *args   **kwargs # def sum1(*args): # 在函数定义时,在*位置参数,聚合. ...

  3. Python基础学习四 函数

    1.内置函数 Python内置了很多有用的函数,是可以直接调用的. 参考链接:https://docs.python.org/3/library/functions.html 调用函数的时候,如果传入 ...

  4. python基础学习Day11 函数名的应用、闭包、迭代器

    一.函数名的应用 1.函数名就是函数的内存地址 def func(): print(666) func() print(func) #函数的内存地址 2.函数名可以作为变量 def func1(): ...

  5. python基础学习Day9 函数的初识,实参、形参、

    1.函数 def my_len(): l = [,,,,,,] count = for i in l: count += print(count) my_len() 定义的my_len()方法时,其结 ...

  6. Python基础学习之 函数

    阅读目录 第一篇:  函数初识 第二篇:  函数命名空间 作用域 闭包 第三篇:  装饰器 第四篇:  装饰器 面试题错误点 第五篇:  迭代器生成器 第六篇:  生成器进阶 第七篇:  递归 第八篇 ...

  7. python基础学习之函数进阶【匿名函数、作用域关系、闭包、递归】

    匿名函数 lambda的用法: lambda x:x+1 解释,同等于以下函数 def test(x): return x+1 因为没有函数名,所以称为匿名函数 只适用于简易的逻辑,复杂逻辑无法实现 ...

  8. python基础学习之函数基础和部分内置函数

    在函数调用的时候,必备参数必须要传入 函数定义: def  函数名: 代码块pass return  返回值 函数名命名规则: 字母.数字和下划线组成,和变量命名规则一致 pass在这里表示什么都没有 ...

  9. python学习第五讲,python基础语法之函数语法,与Import导入模块.

    目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...

  10. Python 基础学习 总结篇

    Python 基础学习总结 先附上所有的章节: Python学习(一)安装.环境配置及IDE推荐 Python学习(二)Python 简介 Python学习(三)流程控制 Python学习(四)数据结 ...

随机推荐

  1. [ An Ac a Day ^_^ ] hdu 1662 Trees on the level 数据结构 二叉树

    紫书上的原题 正好学数据结构拿出来做一下 不知道为什么bfs的队列一定要数组模拟…… 还可以练习一下sscanf…… #include<stdio.h> #include<iostr ...

  2. js 有关字符串的函数 以及一些和字符串有关的知识

    JS自带函数 concat 将两个或多个字符的文本组合起来,返回一个新的字符串. var a = "hello"; var b = ",world"; var ...

  3. contenteditable模仿textarea文本框

    contenteditable 属性是 HTML5 中的新属性. 例子:<p contenteditable="true" style=" border:solid ...

  4. 洛谷-哥德巴赫猜想(升级版)-BOSS战-入门综合练习1

    题目背景 Background 1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有其他约数的数,如2和 ...

  5. centos 10字母随机文件病毒清理

    病毒表现:网络流量暴满,疯狂地向香港的一个IP发数据,同时在top里面表现为随机的10位字母的进程,看/proc里面的信息,则为ls,cd之类常见的命令,CPU利用率也在top之首.杀死该进程后,会再 ...

  6. InnoDB表要建议用自增列做主键

    InnoDB引擎表是基于B+树的索引组织表(IOT): 每个表都需要有一个聚集索引(clustered index): 所有的行记录都存储在B+树的叶子节点(leaf pages of the tre ...

  7. mongoDB2--mongoDB的下载和安装。

    mongdb安装(1)安装准备我们在Linux环境下来安装mongodb,如果没有Linux操作系统的童鞋,可以使用Vmware虚拟机安装一个Linux虚拟环境来学习.这里就不再赘述.我们到mongo ...

  8. GetWindowRect和GetClientRect的异同

    由于项目需要,需要学习CGridCtrl控件的使用,测试控件时发现了一个问题,我无法将控件放在对话框的制定位置. 该问题的原因很容易发现,其实就是GetWindowRec()函数和GetClientR ...

  9. 【01-14】hibernate时间生成

    package rugal.sample.core.entity; import java.util.Date; import java.util.UUID; import javax.persist ...

  10. 使用CFile生成log文件的方法

    下面实例是在退出程序点击退出按钮时,在主程序的根目录下生成一个Log记录,用来记录程序的退出时间,具体实现代码与调试代码如下: void CDebugDlg::OnClose(){ // TODO: ...