函数的定义

函数也就是带名字的代码块。使用关键字def来定义,指出函数名及参数,以冒号结尾。

def fibs(num):

result =[0,1]

for i in range(num-2):

result.append(result[-2] + result[-1])

return result

print(fibs(10))

参数

此处fibs(num)其中的num就是一个形式参数(形参),而后面fibs(10)的10就是实际参数(实参)。简单的说,位于函数名后面的变量通常为形参,而调用函数时提供的值称为实参。位置实参(也就是实参的位置)顺序得注意,不同顺序结果不同。当然可以在调用函数的时候,指定位置实参的内容。比如上面的函数,最后指定print(fibs(num=10)),同样可以输出结果,更准确。

形参也可以设置默认值,

def pople(name, age , sex='man'):

print(name + ' ' + age)

pople('a', '21')

如上,将形参参数sex设置为默认值的时候,当调用函数pople时,就不会输出sex的信息。也可以设置默认的形参参数,通过条件判断语句来输出参数形式。

使用名称指定的参数称为关键字参数。

函数返回的值成为返回值,使用return语句将值返回到调用函数的代码行,返回值让你能够将程序的大部分繁重工作移到函数中去完成,而简化程序。上面的第一个例子就是返回一个最终的result的结果。

参数的收集与分配

1.参数的收集

参数前面的星号将提供的所有的值都放在一个元组中,也就是收集。

带星号的参数也可以放在其他位置,但是得使用名称来指定后续参数:

要收集关键字参数,要使用两个星号,但是得到的结果是一个字典,而不是元组:

2.参数的分配

通过函数的调用使用运算符*来实现:

使用运算符**可以将字典中的值分配给关键字参数:

下面是一个参数的练习:

函数文档编写

在这之中可以通过注释(以#开头)来编写,也还可以通过在def语句后面添加字符串来实现,这个放在函数开头的字符串称为文档字符串,将作为函数的一部分存储起来。

通过__doc__来访问文档字符串(双下划线),也可以使用内置函数help来查看:

变量的作用域

简单的理解变量就是指向值的名称,在函数内使用的变量称为局部变量(与之相对的是全局变量)

读取全局变量可以使用函数globals来访问,关联全局变量可以使用global来指定:

递归

函数调用自身称为递归,使用递归的都可以使用循环来实现。一般情况下,使用循环的效率可能更高,但是很多情况下,使用递归的可读性更高。

以三个实例来说明,阶乘和幂,二分法。

阶乘

1的阶乘为1

大于1的数字n的阶乘为n-1的阶乘再乘以n

def fac(n):
if n == 1:
return 1
else:
  return n * fac(n - 1)

函数power为幂运算,任何数字x的0次幂都为1,即power(x,0)都为1

n大于0时,power(x,n)为power(x,n-1)与x的乘积,也就是x自乘n-1次。

def power(x, n):
if n == 0:
return 1
else:
return x * power(x, n - 1)

二分法

比一般循环效率高

如果上限和下限相同,说明它们都指向的数字所在位置

否则,找出中间的位置,再确定数字的左右的半部分,然后继续在数字所在那部分查找。

以下为使用二分法找出数字所在的下标:

def search(sequence, number, low=0, up=None):
if up is None: up = len(sequence) - 1
if low == up:
assert number == sequence[up]
return up
else:
   middle = (low + up) // 2   if number > sequence[middle]:
   return search(sequence, number, middle + 1, up)
   else:
   return search(sequence, number, low, middle)

python之函数、参数、作用域、递归的更多相关文章

  1. python 零散记录(六) callable 函数参数 作用域 递归

    callable()函数: 检查对象是否可调用,所谓可调用是指那些具有doc string的东西是可以调用的. 函数的参数变化,可变与不可变对象: 首先,数字 字符串 元组是不可变的,只能替换. 对以 ...

  2. Python的函数参数和递归参数

    位置参数 def power(x): return x*x; 默认参数 指的是在函数定义的时候,就赋予一些参数默认值,在调用这个函数的时候不必多次传入重复的参数值. 如定义一个多次输出同一个年龄阶段和 ...

  3. python学习day10 函数Ⅱ(参数&作用域)

    函数Ⅱ(参数&作用域) 知识小结: py2与py3的区别 逻辑运算()>not>and>or 字符串翻转切片翻转 is与==区别 git相关 数据类型判断 操作系统:cent ...

  4. Python进阶(二)----函数参数,作用域

    Python进阶(二)----函数参数,作用域 一丶形参角度:*args,动态位置传参,**kwargs,动态关键字传参 *args: ​ 动态位置参数. 在函数定义时, * 将实参角度的位置参数聚合 ...

  5. Python基础-函数参数

    Python基础-函数参数 写在前面 如非特别说明,下文均基于Python3 摘要 本文详细介绍了函数的各种形参类型,包括位置参数,默认参数值,关键字参数,任意参数列表,强制关键字参数:也介绍了调用函 ...

  6. (转)python中函数参数中如果带有默认参数list的特殊情况

    在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 1 2 3 4 5 6 7 8 9 def f(x,l=[]):     for i in range(x):         ...

  7. python中函数参数的引用方式

    值传递和引用传递时C++中的概念,在python中函数参数的传递是变量指向的对象的物理内存地址!!! python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是“传对象引用”的方 ...

  8. Python学习-函数,函数参数,作用域

    一.函数介绍 函数定义:函数时组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 我们已经知道python提供了许多内建函数,print(), type()等.我们也可以自己创建函数,这被叫 ...

  9. Python之函数&参数&参数解构

    1.1函数定义 def 函数名(参数列表): 函数体(代码块) [return 返回值] p 函数名就是标识符,命名要求一样 语句块必须缩进,约定4个空格 Python的函数没有return语句,隐式 ...

  10. Python 可变长度函数参数

    func( *tuple_grp_nonkw_args, **dict_grp_kw_args ) 在编程的过程中,我们可能会遇到函数参数个数不固定的情况.这时就需要使用可变长度的函数参数来实现我们的 ...

随机推荐

  1. leetcode-217存在重复元素

    leetcode-217存在重复元素 题意 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 示例 1: ...

  2. winsock 编程(简单客户&服务端通信实现)

    winsock 编程(简单客户&服务端通信实现) 双向通信:Client send message to Server, and if  Server receive the message, ...

  3. DAY14(PYTHONS)生成器进阶

    def average(): sum = 0 count = 0 avg = 0 while True: #循环 num = yield avg #遇到yield就停止,防止一开始除数为0导致崩溃 s ...

  4. 闭包,jQuery插件的写法:图片预加载

    最近做的一些网页,单个网页图片量都比较大,网络不好的情况下,特别卡,这个图片预加载的方法可以牺牲一些时间换来网页的浏览顺畅,还是值得的. //闭包的写法,它内部的变量都是局部的,不会和外部巳有的变量进 ...

  5. python爬虫工程师各个阶段需要掌握的技能和知识介绍

    本文主要介绍,想做一个python爬虫工程师,或者也可以说是,如何从零开始,从初级到高级,一步一步,需要掌握哪些知识和技能. 初级爬虫工程师: Web前端的知识:HTML, CSS, JavaScri ...

  6. Java中输入字符的排列以及按从小到大的顺序输出

    今天笔试,遇到一个问题,大意就是输入一行字符,例如a b c ,按从小到大的顺序输出它们排列而成的字符串,输出就是abc acb bac bca cba cab.求这个程序怎么实现. 其实这个题很简单 ...

  7. 聚类——GAKFCM

    聚类——GAKFCM 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 参考文献:黄白梅. 基于GA优化的核模糊C均值聚类算法的研究[D]. 武汉科技大学 ...

  8. Markdown编辑器开发记录(一):开发的初衷和初期踩的坑

    先说下选择Markdown编辑器的原因,我们进行平台开发,需要很多的操作手册和API文档,要在网站中展示出来就需要是HTML格式的文件,但是由于内容很多,不可能全部由技术人员进行文档的编写,如果是只有 ...

  9. Python闭包和装饰器再复习

    闭包 闭包的定义 在一个外函数中定义了一个内函数,并且内函数用到了外部函数的变量,而且外函数的返回值是内函数的引用,这就构成了一个闭包. 一般情况下,在我们认知当中,如果一个函数结束,函数的内部所有东 ...

  10. Day 1 For Knowledge Management

    Hi, There: This is my first day to use CNblogs as my personal knowledge management on internet. I wa ...