---恢复内容开始---

函数:在其他的语言中,我们也经常听到函数的概念,那么什么是函数呢?在Java中叫做method;

定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可;

作用:函数能提高应用的模块性,和代码的重复利用率。

特性:1、代码一致性,2、代码复用性,3、代码可扩展性;

二:

2.1函数的创建:

 在Python中,创建函数要用:def
def 函数名(参数列表):
  函数体
def hello():
print('hello')
hello()#调用hello函数

2.2 函数名的命名规则

1、函数名必须是下滑线,字母开头,包含任意字母,下划线,数字,但是不能使用任何的标点符号;

2、函数名是区分大小写的;

3、函数名字不能是保留字;

2.3形式参数,和实参:

形式参数:是不存在的,虚拟的参数,他存在的目的是为了,在函数调用的时候接收实际的参数,形参的个数数据类型应该与实参一一对应;

实际参数:调用函数的传给函数的参数,可以是常量,变量,表达式,函数 传给形参

区别:形式参数是虚拟的不占用内存空间,只有在调用的时候才会分配给内存空间,实参,是具体的,分配内存空间,只有实参传给形参,形参不能传给实参;实参的传递是单向传输的;

2.4:函数的参数:

必备参数;

不定长参数;

默认参数;

关键字参数;

1、必备参数:必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样;

 def person(name,age):
print('i am %s 年龄 %d'%(name,age))
person('wing',12)

2、默认参数:默认参数是在开始的时候参数就有了默认值;

  如下sex,在开始就有默认值:‘女’,如果后边的代码没有传入sex的参数,会默认给出参数值‘女’

def info(name,age,sex='女'):        

    print('Name:%s'%name)
print('age:%s'%age)
print('Sex:%s'%sex)
return info('wing',18)
info('mimi',40,'男') 执行结果:
Name:wing
age:18
Sex:女
Name:mimi
age:40
Sex:男

3、不定长参数:不定长参数没有明确的参数的个数,这样的函数能够处理比声明的时候更多的参数,这种参数就是不定长参数;

且:加了星号(*)的变量名会存放所有未命名的变量参数。而加(**)的变量名会存放命名的变量参数

 def add(*args):
sum=0
for i in args:
sum+=i
return sum
print(add(1,2,3,4,5))
print(add(1,2,9,0))
#**参数:
def information(**kwargs):
print(kwargs)
for i in kwargs:
print('%s:%s'%(i,kwargs[i]))
return
information(name='hhhhh',age=12,sex='nv',notion='china')

4.不定长参数,*args **kwargs和必须参数的位置是有要求的;

def function(必须参数,*args,**kwargs)不然位置出现错乱,是会报错的;

 def info(name,*args,**kwargs):#def info(name,**kwargs,*args):报错             

     print('Name:%s'%name)                                                   

     print('args:',args)
print('kwargs:',kwargs) return info('lele',18,sex='nv',intion='chin',muqin='xuxu')
执行结果: 
  Name:lele
args: (18,)
kwargs: {'sex': 'nv', 'intion': 'chin', 'muqin': 'xuxu'}

5.高阶函数:

条件:1.满足一个或者多个函数作为输入,

   2.输出一个函数;

 def add(x,y,f):
return f(x) + f(y)
re=add(3,-1,abs)
print(re)

三:函数的返回值:

要获取函数的执行结果,必须使用return返回;

1.函数遇到return就会返回,结束运行,遇到return就代表函数的结束,然后返回值;

2.如果函数中没有return,则默认会给出return,返回值为None;

3.return多个对象,解释器会把这多个对象组装成一个元组作为一个一个整体结果输出;

四:作用域:

Python中作用域分为4种:

1.L,local,局部作用域,即函数中定义的变量;

2.E,enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;

3.G,globa,全局变量,就是模块级别定义的变量;

4.B,    built-in,系统固定模块里面的变量,比如int, bytearray等。 搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB。

 x=int(2.6) #int built-in
g_count =0 #global
def f():
o=1 #enclosing
def inner():
i=2 #local
print(o)
#print(i) 找不到
inner()
f()
#print(o)找不到

注意:在Python中,只有类,模块,函数,才会有,新的作用域的概念,其他的代码块是不会有新的作用域的概念的;

 if 2>1:
x = 1
print(x) # 1 #if并没有引入一个新的作用域,x仍处在当前作用域中,后面代码可以使用
def xue():
x = 2
print(x) # NameError: name 'x' is not defined
 s=1
def f():
print(s)
s=5
f() # 错误的原因在于print(s)时,解释器会在局部作用域找,会找到s=5(函数已经加载到内存),但s使用在声明前了,所以报错:
# local variable 's' referenced before assignment.如何证明找到了s=5呢?简单:注释掉s=5,s=1
# 报错为:name 's' is not defined
#同理
x=2
def f2():
x+=2 #local variable 'x' referenced before assignment.
f2()

4.2当一个函数的作用域想要修改外部作用域的时候,这时候就要用到gobal了,和nonlocal,当修改的变量是全局作用域的时候,就要用到gobal了;

 count = 1                 

 def outer():
global count
print(count)
count = 0
print(count)
outer()
#1
#0

4.3:global关键字声明的变量必须在全局作用域上,不能嵌套作用域上,当要修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量怎么办呢,这时就需要nonlocal关键字了;

def outer():
count = 10
def inner():
nonlocal count
count = 20
print(count)
inner()
print(count)
outer()
#
#

(1)变量查找顺序:LEGB,作用域局部>外层作用域>当前模块中的全局>python内置作用域;

(2)只有模块、类、及函数才能引入新作用域;

(3)对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量;

(4)内部作用域要修改外部作用域变量的值时,全局变量要使用global关键字,嵌套作用域变量要使用nonlocal关键字。nonlocal是python3新增的关键字,有了这个 关键字,就能完美的实现闭包了。

4.4递归:

函数的内部可以调用其他的函数,如果函数自己调用自己,这种就是递归;

 def fun(n):
res=n
for i in range(1,n) :
res*=i
return res
print(fun(4)) #****************递归
def f(n):
if n==1:
return 1
return n*f(n-1)
print(f(3))

4.4.2斐波那契数列:

#**************递归*********************
def fibo(n):#n可以为零,数列有[0] if n <= 1:
return n
return(fibo(n-1) + fibo(n-2)) print(fibo(3))

递归:

必须有一个明确的结束的条件;

每次进入深层次的递归的时候,问题都会比上一次的递归应用有所减少;

递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返     回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。)

五:函数式编程

函数式编程中的函数这个术语不是指计算机中的函数,而是指数学中的函数,即自变量的映射。也就是说一个函数的值仅决定于函数参数的值,不依赖其他状态。比如y=x*x函数计算x的平方根,只要x的平方,不论什么时候调用,调用几次,值都是不变的。

1、函数式编程简单易懂;

其余的不在赘述;

Python基础之-----------函数的更多相关文章

  1. python基础——匿名函数

    python基础——匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便.  在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时 ...

  2. python基础——返回函数

    python基础——返回函数 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.  我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_ ...

  3. python基础——sorted()函数

    python基础——sorted()函数 排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个d ...

  4. python基础——filter函数

    python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...

  5. python基础——匿名函数及递归函数

    python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x ...

  6. 八. Python基础(8)--函数

    八. Python基础(8)--函数 1 ● 函数返回布尔值 注意, 自定义的函数也可以是用来作逻辑判断的, 例如内置的startswith()等函数. def check_len(x):     ' ...

  7. python基础之函数详解

    Python基础之函数详解 目录 Python基础之函数详解 一.函数的定义 二.函数的调用 三.函数返回值 四.函数的参数 4.1 位置参数 4.2 关键字参数 实参:位置实参和关键字参数的混合使用 ...

  8. Python学习笔记(一)python基础与函数

    1.python基础 1.1输入与输出 输出 用print加上字符串,就可以打印指定的文字或数字 >>> print 'hello, world' hello, world > ...

  9. Day3 - Python基础3 函数、递归、内置函数

    Python之路,Day3 - Python基础3   本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8. ...

  10. Python基础__函数

    本节将进入函数的介绍,函数是Python基础中最精彩的部分之一,接下来将对函数做详细介绍.函数 函数就是对代码进行一个封装.把实现某一功能的代码进行封装到一起.下次需要使用时不需要进行编写代码直接调用 ...

随机推荐

  1. Docker的概述

    什么是Docker 1.容器技术 在计算机的世界中,容器拥有一段漫长且传奇的历史.容器与管理程序虚拟化(hypervisor virtualization,HV)有所不同,管理程序虚拟化通过中间层将一 ...

  2. spring的IOC 的底层实现原理

    IOC:Inversion of Control  控制反转. 指的是 对象的创建权反转(交给)给 Spring. 作用是实现了程序的解耦合.

  3. tkinter简单打开网址 + 执行系统命令

    from tkinter import * import webbrowser root = Tk() text = Text(root,width=30,height = 5) text.pack( ...

  4. 44.scrapy爬取链家网站二手房信息-2

    全面采集二手房数据: 网站二手房总数据量为27650条,但有的参数字段会出现一些问题,因为只给返回100页数据,具体查看就需要去细分请求url参数去请求网站数据.我这里大概的获取了一下筛选条件参数,一 ...

  5. Linux系统Oracle启动、关闭

    Linux系统启动Oracle命令 su - oracle sqlplus /nolog conn / as sysdba startup exit lsnrctl start exit Linux系 ...

  6. Maven下载私服上的jar包(全局)

    <mirror> <id>maven-public</id> <mirrorOf>maven-public</mirrorOf> <n ...

  7. <转载>ant使用指南详细入门教程 http://www.jb51.net/article/67041.htm

    这篇文章主要介绍了ant使用指南详细入门教程,本文详细的讲解了安装.验证安装.使用方法.使用实例.ant命令等内容,需要的朋友可以参考下 一.概述 ant 是一个将软件编译.测试.部署等步骤联系在一起 ...

  8. Ubuntu的常用快捷键(摘自网络)

    篇一 : Ubuntu的复制粘贴操作及常用快捷键(摘自网络) Ubuntu的复制粘贴操作 1.最为简单,最为常用的应该是鼠标右键操作了,可以选中文件,字符等,右键鼠标,复制,到目的地右键鼠标,粘贴就结 ...

  9. 使用STM32CubeMX生成USB_HOST_HID工程[添加对CAPS_LOCK指示灯的控制][SetReport]

    在之前(使用STM32CubeMX生成USB_HOST_HID工程)的基础上进行修改 在结合之前在pc上的测试 USB之HID类Set_Report Request[调试手记1] 测试代码如下: /* ...

  10. ADOQuery.Parameters: Property Parameters does not exist

    Exception class EReadError with message 'Property Parameters does not exist'. Exception class EReadE ...