函数

函数(Functions)

是指可重复使用的程序片段。它们允许你为某个代码块赋予名字,允许你通过这一特殊的名字在你的程序任何地方来运行代码块,并可重复任何次数。这就是调用(Calling)函数。

函数的作用:

1、减少重复代码

2、方便修改,更易扩展

3、保持代码的一致性

函数的创建:

def 函数名(参数1,参数2...):

函数体(语句块)

函数名的命名规则:

必须以下划线和小写字母为开头,一般用小写字母和单下划线、数字等组合函数名是区分大小写的

函数体(语句块)前,需要缩进4个空格

调用函数时一定记得要加括号

函数名后面的括号中,可以有参数列表,也可以没有参数

函数名是区分大小写的

形参与实参:

形参:形势参数,在函数中定义时的参数,不实际存在,是虚拟的变量

实参:实际参数,在调用函数过程中使用的参数,传给形参

区别:形参是虚拟的,不占用内存空间,只有在被调用时才分配内存单元

   实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参

函数的参数

一、必需的参数:

必需参数须以正确的顺序传入函数中,调用时的顺序必须和函数声明时一致

二、关键字参数

函数可以通过关键字参数来确定传入的参数值,使用关键字参数允许函数调用时参数时顺序与声明时不一致,关键字参数在实参中添加

def print_info(name,age,job):
print('Name: %s' %name)
print('Age: %d' %age)
print('Job: %s' %job) print_info('Mike',20,'student') #必需参数
print_info(name='Mike',age=20,job='student') #关键字参数

三、默认参数(缺省参数)

调用函数时,默认参数的值如果没有被传入,即为默认值,默认参数可以在形参中添加

def print_info(name,age,job='student'):  #默认参数需要跟在其他参数后
print('Name: %s' %name)
print('Age: %d' %age)
print('Job: %s' %job)
print('---------------------')
print_info('Mike',20)
print_info('Alex',20)
print_info('John',35,'teacher') #改变默认参数的值

四、不定长参数

当处理比当初声明时更多的参数时,可以使用不定长参数,声明时不需要进行命名。

星号(*)的变量名会存放所有未命名的变量参数,使用一个元组来进行储存。

两个星号(**)的变量名会存放命名的变量参数,使用字典中的键值对来进行储存

注意:关于不定长参数的位置:*args参数放在左边,**args参数放在右边

   如果有默认参数存在,放在左边,关键字参数放在最左边,最后是不定长参数

Eg.*args

def add(*args):  #*args表示函数接收不定长的参数
print(args)
sum = 0
for i in args: # args为一个元组
sum += i
print(sum)
add(1,2,3)

Eg.**kwargs

def print_info(*args,**kwargs):
print(args)
print(kwargs)
for i in kwargs:
print('%s : %s' %(i,kwargs[i]))
print_info('John',35,'teacher',hobby='reading') #**kwargs数据会被处理成为一对键值对放入字典中

函数的返回值

获取函数的执行结果,可以使用return语句来执行把结果返回

return的作用:1、结束当前函数 2、返回某个对象的值

注意:1.函数默认的return值为None,即如果未指定return语句,函数默认返回None

   2.return可以返回多个对象,并把多个对象封装成为一个元组,作为一个整体输出

函数的作用域

4种不同的作用域:

L:local,局部作用域,也称本地作用域,函数中定义的变量;

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

G:global,全局作用域,全局变量,就是模块级别定义的变量;

B:built-in,内建作用域,系统固定模块里面的变量,例如int,bytearray;

a = 0 # global
d = 4 # global
def outer():
c = 3 # enclosing
d = 5 # enclosing
global a
a = 1 # 由 enslosing 修改为 global
def inner():
b = 2 # local
d = 6 # local
print('本地作用域中变量b:',b)
print('此时的变量d:',d)
inner() # 调用inner函数
print('嵌套作用域中变量c:',c)
#print(b) 语句会报错(name 'b' is not defined),因为python找不到变量b声明的值 outer()
print('全局作用域中变量a:',a)
>>>本地作用域中变量b: 2
  此时的变量d: 6
  嵌套作用域中变量c: 3
  全局作用域中变量a: 1

global关键字

在内部作用域中,当要修改外部作用域(全局作用域)的变量的时候,这时可以使用global关键字

a = 0 # global
def outer():
global a
a = 1 # 将 enclosing 修改为 global
print('-------------------')
print('修改前:', 'a =', a)
outer() # 调用outer函数
print('-------------------')
print('修改后:', 'a =', a)
>>>-------------------
修改前: a = 0
-------------------
修改后: a = 1

nonlocal关键字

在嵌套作用域中,当要修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量时,这时可以使用nonlocal关键字

def outer():
a = 1 # enclosing
b = 7 # enclosing
def inner():
a = 2 # local
nonlocal b
b = 8 # 将 local 修改为 enclosing
print('-------------------')
print('修改前:','a =',a,'b =',b) #没有调用inner函数前,a,b的值
inner()
print('-------------------')
print('修改后:','a =',a,'b =',b) #调用了inner函数,a的值依然没有修改,因为a=2是在local中
outer()
>>>-------------------
修改前: a = 1 b = 7
-------------------
修改后: a = 1 b = 8

注意:

  • 搜索变量的优先级顺序:作用域局部>>外层作用域>>当前模块中的全局>>python内置作用域;
  • 只有模块、类以及函数才能引入新的作用域;
  • 对于一个变量,内部作用域先声明就会覆盖外部变量,倘若不声明直接使用,就会使用外部作用域的变量;
  • 内部作用域要修改外部作用域变量的值时,修改全局变量要使用global关键字,修改嵌套作用域变量要使用nonglobal关键字;

Python学习 :函数的更多相关文章

  1. python学习-函数和lambda表达式(五)

    5.2函数参数 位置参数:根据位置传入参数 关键字参数:根据参数名来传入参数 def girth(width, height): print("width:", width) pr ...

  2. python学习——函数返回值及递归

    返回值 return语句是从python 函数返回一个值,在讲到定义函数的时候有讲过,每个函数都要有一个返回值.Python中的return语句有什么作用,今天小编就依目前所了解的讲解一下.pytho ...

  3. python学习——函数及其参数

    函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.严格来说python只有函数,没有过程,人们理解的函数都是带有return的,而过程 ...

  4. python学习 函数

    # -*- config=utf-8 -*- #################################### 函数 ################################## de ...

  5. day10 python学习 函数的嵌套命名空间作用域 三元运算 位置参数 默认参数 动态参数

    1.三元运算 #1.三元运算 利用已下方法就可以实现一步运算返回a b中大的值 def my_max(a,b): c=0 a=int(input('请输入')) b=int(input('请输入')) ...

  6. python学习——函数进阶

    首先来看下面这个函数. def func(x,y): bigger = x if x > y else y return bigger ret = func(10,20) print(ret) ...

  7. python学习——函数

     一.在python的世界里什么是函数: 答:函数通常是用来实现某一个功能二被封装成的一个对象,是用来实现代码复用的常用方式 现在有一个需求,假如你在不知道len()方法的情况下,要你计算字符串‘he ...

  8. python学习——函数参数

    一.为什么要使用函数 函数能提高应用的模块性,和代码的重复利用率. 二.函数的参数 位置参数:从左至右进行匹配 一般情况,也就是我们迄今为止最常用的方法,是通过位置进行匹配把参数值传递给函数头部的参数 ...

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

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

  10. 二、python学习-函数

    类型判断 1.type()直接获取类型 2.isinstance 用法一:isinstance(值,类型) 返回真或假 用法二:isinstance(值,(类型1,类型2 ...)) 有一个类型满足 ...

随机推荐

  1. 爬虫入门之Scrapy框架基础rule与LinkExtractors(十一)

    1 parse()方法的工作机制: 1. 因为使用的yield,而不是return.parse函数将会被当做一个生成器使用.scrapy会逐一获取parse方法中生成的结果,并判断该结果是一个什么样的 ...

  2. Rabbit MQ config文件解析

    Rabbit MQ config文件解析 tcp_listeners:用于监听AMQP连接的端口或主机名/对(不带TLS),默认端口:5672 2.numtcpacceptors :将接受TCP侦听器 ...

  3. Thrift学习笔记—IDL基本类型

    thrift 采用IDL(Interface Definition Language)来定义通用的服务接口,并通过生成不同的语言代理实现来达到跨语言.平台的功能.在thrift的IDL中可以定义以下一 ...

  4. 安装nginx及依赖包

    #!/bin/bash #auto zhangjia #date 20171007#安装SSL##################################################### ...

  5. Python初学者第六天 列表操作练习

    6day 列表练习: 1.创建一个空列表,命名为names,往里面添加old_drilver,rain,jack,shanshan,peiqi,black_girl: names = [] names ...

  6. Event Driven Architecture

    在微服务中使用领域事件   稍微回想一下计算机硬件的工作原理我们便不难发现,整个计算机的工作过程其实就是一个对事件的处理过程.当你点击鼠标.敲击键盘或者插上U盘时,计算机便以中断的形式处理各种外部事件 ...

  7. 使用View填充ViewPager

    ViewPager在app开发中十分常见.今天以一个例子详细解读下ViewPager的基础知识. 一.什么是ViewPager 可以这样理解,ViewPager就相当于一个容器,它的里面可以装view ...

  8. php------中文出现乱码解决方法

    中文出现乱码解决方法:原因编码格式不一致 [1]  建立数据库的时候,字符集选择utf-8  数据库,点表名,点右键,数据库属性…. [2]  修改myspl的配置,在[myspld]模块下面添加ch ...

  9. 19、配置嵌入式servlet容器(下)

    使用外置的Servlet   嵌入式Servlet容器:应用打成可执行的j ar 优点:简单.便携: 缺点:默认不支持JSP.优化定制比较复杂         使用定制器[ServerProperti ...

  10. Redis(RedisTemplate)使用string字符串

    RedisTemplate配置:https://www.cnblogs.com/weibanggang/p/10188682.html ApplicationContext applicationCo ...