参考链接:https://www.cnblogs.com/yuanchenqi/articles/5828233.html

1.函数的定义

定义: 

函数是指将一组语句的集合通过一个函数名封装起来,要想执行该函数,只需调用其函数名即可 

特性:

1.代码重用(减少重复代码)

2.保持代码的一致性

3.可扩展性(方便修改)

2.函数的创建

格式

Python 定义函数使用 def 关键字,一般格式如下:

def 函数名(参数列表):

  函数体

函数名的命名规则

和变量命名规则一致

形参和实参

形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体的时候使用形参,

   目的是在函数调用时接收实参(实参个数,类型应与实参一一对应)

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

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

   占用内存空间,数据传送单向,实参传给形参,不能形参传给实参

函数的参数

    • 必备参数:必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样
    • 关键字参数:函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,

因为 Python 解释器能够用参数名匹配参数值。

    • 默认参数(缺省参数):调用函数时,缺省参数的值如果没有传入,则被认为是默认值(在定义函数时已赋值)。
 def print_info(name,age,sex='female'):
print('name:%s\nage:%i\nsex:%s'%(name,int(age),sex))
print_info(age=24,name='venus',sex='male')
输出结果:
name:venus
age:24
sex:male
print_info(age=24,name='venus')
输出结果:
name:venus
age:24
sex:female

关键字参数、默认参数

注:默认参数一定要跟在其它参数后面

    • 不定长参数 :你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。

加了星号(*)的变量名会存放所有未命名的变量参数(元组)

 def senior_add(*args):
sum=0
for i in args:
sum+=i
print(args)
print(type(args))
print(sum) senior_add(1,2,3,4,5,6,7)
输出结果:
(1, 2, 3, 4, 5, 6, 7)
<class 'tuple'>
28

*

加(**)的变量名会存放命名的变量参数(字典)

 def print_info(**kwargs):
print(type(kwargs))
for i in kwargs:
print('%s:%s'%(i,kwargs[i])) print_info(age=24,name='venus',sex='male')
print_info(age=24,name='venus',job='IT') 输出结果:
<class 'dict'>
age:24
name:venus
sex:male
<class 'dict'>
age:24
name:venus
job:IT

**

注:(1)一定要注意*args和*kwargs的位置关系:保证 *args在*kwargs的前面,即(*args,*kwargs),传实参时也要遵照此原则

  (2)形参优先级:关键字参数,默认参数,不定长未命名参数,不定长命名参数,即(name,age=22,*args,*kwargs)

很重要的传参方式

 def f(*args):
print(type(args))
print(args)
f([1,2,3])
f(*[1,2,3]) 输出结果
<class 'tuple'>
([1, 2, 3],)
<class 'tuple'>
(1, 2, 3)

f(*list)

 def f(**kwargs):
print(type(kwargs))
print(kwargs) f({'name':'venus'})
f(info={'name':'venus'})
f(**{'name':'venus'}) # 输出结果
报错 <class 'dict'>
{'info': {'name': 'venus'}} <class 'dict'>
{'name': 'venus'}

f(**dict)

    •  补充高阶函数
 def f1(n):
return n**2
def f2(n):
return n*2
def ff(a,b,func):
return func(a)+func(b) print(ff(2,3,f1))
print(ff(2,3,f2)) 输出结果:
13
10

高阶函数

 函数的返回值

要想获取函数的执行结果,就可以用return语句把结果返回

注意:

    1. 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
    2. 如果未在函数中指定return,那这个函数的返回值为None
    3. return多个对象,解释器会把这多个对象组装成一个元组作为一个一个整体结果输出。

 作用域!!!

作用域介绍:python中的作用域分4种情况:L、E、G、B

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

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

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

B:built-in,系统固定模块里面的变量,比如int, bytearray等。

搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB

注:全局变量在局部区域里只能查看不能对其操作,有类似的找工作笔试题:

g_count=10#全局变量

def f():

   g_count=1  #这是允许的#局部变量

g_count=10

def f():

  g_ count+=1  #这是不允许的

g_count=10  #定义一个全局变量

def f():

global  g_count  #在local里面是通过global申明一下是全局变量,

   print(g_count)

   g_count=1 #这就允许了

e_coung=3  #定义一个enclosing变量 

  def   ff():

    nonlocal  e_count   #在local里面是通过nonlocal申明enclosing变量

    e_count+=5

小结

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

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

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

(4)内部作用域要修改外部作用域变量的值时,全局变量要使用global关键字,嵌套作用域变量要使用nonlocal关键字。

nonlocal是python3新增的关键字,有了这个 关键字,就能完美的实现闭包了。

Day9 Python基础之函数基础(七)的更多相关文章

  1. python学习总结 --函数基础

    函数基础 ### 函数简介 - 定义:具有特定功能的一段代码 - 优点: - 可以减少代码的重复书写 - 可以将功能的实现着和使用者分开,可以提高开发效率 - 分类: - 库函数:print.inpu ...

  2. Python学习笔记-函数基础

    函数基础 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 为什么使用函数:减少重复代码.使程序变的可扩展使程序变得易维护 1.定义一个函数 #定 ...

  3. Python 入门基础10 --函数基础3 函数对象、名称空间、装饰器

    今日内容 1.函数对象 2.名称空间与作用域 3.函数的嵌套调用与闭包 4.装饰器 一.函数对象 1.1 定义 函数名存放的就是函数地址,所以函数名也就是对象,称之为函数对象 1.2 函数对象的应用 ...

  4. Python 入门基础11 --函数基础4 迭代器、生成器、枚举类型

    今日目录: 1.迭代器 2.可迭代对象 3.迭代器对象 4.for循环迭代器 5.生成器 6.枚举对象 一.迭代器: 循环反馈的容器(集合类型) 每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的 ...

  5. Python之路-函数基础&局部变量与全局变量&匿名函数&递归函数&高阶函数

    一.函数的定义与调用 函数:组织好的.可重复使用的.用户实现单一或者关联功能的代码段.函数能够提高应用的模块性和代码的重复利用率.Python提供了很多内置的函数,比如len等等,另外也可以根据自己的 ...

  6. python学习日记(函数基础)

    修改文件(原理)--回顾 #修改文件(原理) with open('name','r',encoding='utf-8') as f,\ open('password','w+',encoding=' ...

  7. Python 入门基础12 --函数基础5 匿名函数、内置函数

    今日内容: 1.三元表达式 2.列表.元组生成式 | 字典生成式 3.递归 4.匿名函数 5.内置函数 一.三元表达式 三元运算符:就是 if...else... 语法糖 前提:if 和 else # ...

  8. python学习之函数基础

    第一个python函数: >>> def func_1(): ... print 'hello python' ... >>> func_1() hello pyt ...

  9. python学习之【第八篇】:Python中的函数基础

    1.前言 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率. 2.函数的定义 定义函数时需要遵守以下规则: 函数代码块以 def 关键词开头 ...

随机推荐

  1. PostgreSQL分页

    转自 https://blog.csdn.net/tomcat_2014/article/details/49947711 如果用过mysql,那么对 select * from xxx limit ...

  2. [Hive_3] Hive 建表指定分隔符

    0. 说明 Hive 建表示例及指定分隔符 1. Hive 建表 Demo 在 Hive 中输入以下命令创建表 user2 create table users2 (id int, name stri ...

  3. echarts设置y轴值间隔

    其中min.max可以自定义可以动态获取数据 yAxis : [ {                        type : 'value',                        axi ...

  4. 设计模式のAbstractFactory(虚拟工厂)----创建模式

    一.产生背景 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最 ...

  5. 数以亿计运行PHP的网站即将面临严重的安全风险

    数以亿计运行PHP的网站即将面临严重的安全风险 根据W3Techs的统计数据,目前所有互联网站点中约有78.9%使用PHP运行.但是2018年12月31日,PHP 5.6.x的安全支持将正式停止,标志 ...

  6. 大学?做码农?做project师?

        近期看到一个知乎里非常热闹的讨论.当中讨论到科研能力与project能力,我有非常多感想. 想说说大学CS方向的一些东西.     我不是计算机专业的,如今大二本科工科在读.     我接触编 ...

  7. nginx作为负载均衡服务器,tomcat作为应用服务器

    1 如果想用一台主机,能够部署多个站点,并且访问每个站点都要求是在80端口,可以采用nginx+tomcat的方式 需要注意的是,tomcat一定不要监听80端口.   可以将静态资源配置在nginx ...

  8. tensorflow错误:Shape (10, ?) must have rank at least 3

    错误的代码 outputs, _ = tf.nn.dynamic_rnn(cell, X, dtype=tf.float32) 错误原因: 该错误的意思是传入的数据集X的维度只有二维,而tf.nn.d ...

  9. 【vue】vue +element 搭建项目,在使用InputNumber 计数器时遇到的问题

    自己遇到的坑: InputNumber 计数器的change事件定义时如果不传入参数value,会产生this.num不同步的问题 <template> <el-input-numb ...

  10. 错误RuntimeError: Invalid DISPLAY variable

    原因:matplotlib的backend中的FltkAgg, GTK, GTKAgg, GTKCairo, TkAgg , Wx or WxAgg这几个backend都要求有GUI图形界面的 首先查 ...