学了 Python 中的数据类型,语句,接下来就来说一下 Python 中的函数,函数是结构化编程的核心。我们使用函数可以增加程序的可读性。自定义函数时使用关键字def 函数由多条语句组成。在定义函数的时候我们可以使用如下的方式给函数定义一个解释文档。

def square(x):
'This is comment of this method !'
return x * x # 获取方法注释信息
square.__doc__

上面定义的函数我们就可以通过函数名.__doc__的方式获取方法的文档字符串。

另外,所有的函数都有返回值,如果你没有显示的告诉它返回什么,则返回None

一个函数怎么能少得了参数的部分呢,一不留神可能就会搞错,这里大概说一下,若传递的参数为不可变的参数,则不会修改参数的值,像是 数字,字符串,元组,但若是引用值的话,就可能会将原来的值改变。比方说 列表,字典。可以采用切片的方式避免对传入列表的修改,如:change(names[:]) 这样的话我们传入的是names列表的一个复制版本,而对 names 本身没有影响。

关键字参数和默认值,举例说明

def hello(greeting = 'Hello',name = 'world'):
print('{},{}!'.format(greeting,name)) hello()
Hello,world! hello(name = 'YJK923')
Hello,YJK923!

可变参数:允许用户提供任意数量的参数。使用 * 号将提供的所有参数收集到一个元组中。这种用法在赋值的时候也遇到过。举例

def print_params(*param):
print(param) print_param('Testing')
Testing print_param(1,2,3)
(1,2,3)

星号的参数最好放在最后,不然在调用方法的时候需要指出星号参数后面的参数的值是多少。 
还有一种使用两个星号,是用于收集带有关键字参数的方法,得到的值是一个字典而不是一个元组。

def print_dict(**params):
print(params) print_dict(x = 1,y = 2,z = 3)
{'z':'','x':'','y':''}

上面两个都是在定义函数的时候使用了 * ,那我们在调用的函数的时候也可以使用星号,这也就是分配参数,像这样

def add(x,y):
return x + y param = (1,2) # 定义一个元组,用做参数
add(*param) # 使用 * 来分配参数
3 # 结果为 3 ,这就是分配参数之后的结果

Python 中的作用域的概念类似于 Java,所以理解起来没有问题,但是 Python 好像都不是老老实实的,我们知道在方法里的变量是局部变量,我们在方法里使用时,全局变量不受影响,但是 Python 社区的小伙伴就是想改变全局变量的值,该怎么操作呢?发明了一个关键字global用于指定某个方法里的值为全局变量。

x = 1
def change(x):
global x # 此时的x就是指向全局变量x
x = x + 1 change(x)
此时 x = 2

递归 : 函数之间的相互调用是很正常的,存在这么一种情况,那就是自己调用自己,这就是递归调用。 
举例说明

# 计算数字n的阶乘 n ! = n * (n-1) * (n -2) * ... * 1
# 分析:1 的阶乘为 1,大于 1 的数 n 的阶乘等于 n-1 的阶乘 * n
def factorial(n):
if n == 1 :
return 1
else :
return n * factorial(n-1)

递归函数通常包含两部分内容,一是基线条件,满足条件函数将直接放回一个值,像上面的n = 1 return 1 二是包含一个或多个调用,这些调用旨在解决问题的一部门。这里的关键是,通过将问题分解为较小的部门,可避免递归没完没了,因为问题终将被分解成基线条件可以解决的最小问题。(抽象啊,多看看,体会体会吧!)

# 计算某一个数的幂
# 分析:power(x,n) 表示计算 x 的 n 次幂。也就是将数 x 自乘 n-1 次。
# 对于任意数来说,n 为 0 的时候结果都为 1,n > 0 的时候,power(x,n) = x * power(x,n-1) ,是不是感觉可以用递归做点什么!
def power(x,n):
if n == 0 :
return 1
else :
return x * power(x,n-1)

好吧,上面两个递归运算还没有理解递归的概念,没关系,还有一个!

# 使用python递归实现二分法查找
# 介绍:在有序的列表中,所要查找数据和中间数据比较。依次拆分,比较中间的数。
def search(list,number,lower,upper):
'使用二分法查找指定数据的索引,list 是排好序的列表,number 是查找的数据 lower,upper 指定查找的起始位置'
if lower == upper:
assert number == list[upper]
return upper
else :
middle = (lower + upper) // 2 # // 表示不留小数除
if number > list[middle] :
return search(list,number,middle+1,upper)
else :
return search(list,number,lower,middle)

说了以上这么多,对函数式编程的理解也是马马虎虎,用函数来编写程序 ?可能看到了 Python 中提供的这几个函数,能对函数式编程加深一下感觉。map filter reduce 给几个例子看一下

list(map(str,range(5))) # 与[srt(i) for i in range(5)] 等价
['','','','',''] # 可以使用 filter根据布尔函数的返回值对元素进行过滤
# 首先你得有一个可以返回布尔值的函数
def func(x):
return x.isalnum() # isalnum 方法检测字符串是否由字母或数字组成 seq = ['foo','x41','***','?!']
list(filter(func,seq))
['foo','x41'] # 同样的实现可以这么来
[x for x in seq if x.isalnum()] # 还有一种叫 lambda 表达式的玩意,是这样写的
filter(lambda x : x.isalnum(),seq) # lambda 表达式是一个匿名的函数,简单的理解,冒号前面是参数,冒号后面是方法体(返回值)
lambda x , y : x + y # 这就是表示有两个参数返回值是参数和的匿名函数呗! # 使用指定的函数将序列的前两个元素和二为一,再将结构与第三个元素和二为一,最终处理完序列得到一个结果。
numbers = [72,42,7,9,23,67,97,245]
from functools import reduce
reduce(lambda x,y:x+y,numbers)
# 当然,就这个案例来说,倒不如使用内置函数 sum 求和。

好吧,以上就是 Python 中函数相关的问题,至此,我们已经学习了 Python 的数据类型以及数据类型的常用操作,后便是语句,语句中牵扯到一些循环和条件判断语句的使用,而函数可以看成是对语句的简单抽象与封装,而真正的面向对象的思想还在下一节类的相关概念中。

推荐阅读:

Python 学习经历分享

Python 入门之基本数据类型

Python 中的语句

Python 中的函数的更多相关文章

  1. Python中split()函数的用法及实际使用示例

    Python中split()函数,通常用于将字符串切片并转换为列表. 一.函数说明: split():语法:str.split(str="",num=string.count(st ...

  2. Python中利用函数装饰器实现备忘功能

    Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下   " ...

  3. python中range()函数的用法

    python中range()函数可创建一个整数列表,一般用在for循环中. range()函数语法: range(start,stop[,step]) 参数说明: star: 计数从star开始.默认 ...

  4. python中format函数

    python中format函数用于字符串的格式化 通过关键字 1 print('{名字}今天{动作}'.format(名字='陈某某',动作='拍视频'))#通过关键字 2 grade = {'nam ...

  5. Python中readline()函数 去除换行符

    从Python中readline()函数读取的一行内容中含有换行符\n,很多时候我们需要处理不含有换行符的字符串,此时就要去掉换行符\n. 方法是使用strip()函数. 例子如下: f = open ...

  6. Python中int()函数的用法浅析

      int()是Python的一个内部函数 Python系统帮助里面是这么说的 >>> help(int)  Help on class int in module __builti ...

  7. 【313】python 中 print 函数用法总结

    参考:python 中 print 函数用法总结 参考:Python print() 函数(菜鸟教程) 参考:Python 3 print 函数用法总结 目录: 字符串和数值类型 变量 格式化输出 p ...

  8. python中filter函数

    python中filter()函数   filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断 ...

  9. Python中print()函数不换行的方法

    一.让print()函数不换行 在Python中,print()函数默认是换行的.但是,在很多情况下,我们需要不换行的输出(比如在算法竞赛中).那么,在Python中如何做到这一点呢? 其实很简单.只 ...

随机推荐

  1. 程序员 & 设计师都能用上的 75 份速查手册

    分享75份开发人员和设计师会用到的速查手册,由 vikas 收集整理,包括:jQuery.HTML.HTML5.CSS.CSS3.JavaScript.Photoshop .git.Linux.Jav ...

  2. 38、使用IO流进行文件拷贝

    使用IO流进行文件拷贝 需求:在项目的根目录里面创建一个java.txt的文件,然后将这个文件拷贝到file文件夹里面并且重命名为good.txt文件先以流的方式将java.txt文件读取到内存中,然 ...

  3. php 创建验证码方法

    php创建验证码方法: <?php function getVerify($length=4,$sessName='verify'){ //验证码 //获取字符串 去除01ol等较难辨认字符 $ ...

  4. js工作常见问题收集

    1. viewport <meta name="viewport" content="width=device-width,initial-scale=1.0,mi ...

  5. 20165227 学习基础和C语言基础调查

    学习基础和C语言基础调查 技能学习经验和感悟 你有什么技能比大多人(超过90%以上)更好? 如果非要说出来一个的话,那就是篮球了.从热爱篮球,到热爱打篮球,经历挫折阻碍,不断反思学习,一步一步地向前迈 ...

  6. oracle同义词是什么意思?

    相当于alias,比如把user1.table1 在user2中建一个同义词table1create synonym table1 for user1.table1;这样当我们在user2中查sele ...

  7. Android音视频点/直播模块开发实践总结-zz

    随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能.那么作为开发一个小白,如何快速学习音视频基础知识,了解音视频编解码的传输协议,编解码方式,以及 ...

  8. Material Design In Action——重构bilibili客户端

    前言 哔哩哔哩动画是中国大陆的一家弹幕视频网站,在中国二次元用户中颇受欢迎. 哔哩哔哩动画之前推出过采用 Android Design 的 Android 客户端,虽然有使用了部分过时控件(例如 Sc ...

  9. 全网最全JS正则表达式 校验数字

    Js代码 <script type="text/javascript"> function SubmitCk() { var reg = /^([a-zA-Z0-9]+ ...

  10. 【驱动】USB驱动实例·串口驱动·键盘驱动【转】

    转自:http://www.cnblogs.com/lcw/p/3159370.html Preface USB体系支持多种类型的设备. 在 Linux内核,所有的USB设备都使用 usb_drive ...