## **函数(1)**

**函数的定义:**
1. [ ] 小时候大家应该都玩过乐高积木,只要通过想象和创意,可以用它怕拼凑出很多神奇的东西。随着学习的深入,编写的代码日益增加并且越来越复杂,所以需要找一个方法对这些复杂的代码进行重新组织。
2. [ ] 为了是使得程序的代码更为简单,就需要把程序分解成较小的组成部分。(三种方法 函数,对象和模块)
3. [ ] 函数就是把代码打包成了不同形状的乐高积木。之前接触的BIF(内置函数)就是python帮我们封装好的函数,用的时候很方便。简单来讲,一个程序可以按照不同功能的实现,分割许多代码块,每一个代码块就可以封装成一个函数。在python中创建一个函数用def关键字:

函数 模板

> def 函数名称():
> 函数内容

例如

```
    def MyFirstFunction() :
    print("这是我创建的第一个函数")
    print("我很开心")
```

注意,在函数名后面要加上一对小括号。

- [ ]   函数的调用:(既然创建了函数就要去使用)

```
   >>>def MyFirstFunction() :
          print("这是我创建的第一个函数")
          print("我很开心")

>>>MyFirstFunction()
```

- [ ] 并且函数的调用还可以有返回值,例如
```
   >>>def MyFirstFunction() :
             return '函数调用成功'

>>>str_list = MyFirstFunction()
   >>>print(str_list) #'函数调用成功'
```
在你定义的函数下面输入函数的名称就可以进行调用。(函数的调用机制:当函数MyFirstFunction() 发生调用操作的时候,python会自动往上找到 def MyFirstFunction() 的定义过程,然后依次执行该函数所包含的代码块部分)
> 总结:
> 1.遇到return,此函数结束,return后面的东西将不会在执行
   2.return 返回值
  关于返回值:
      如果return什么都不写或者干脆就没写return,返回的结果就是None
      如果return后面写了一个值,返回给调用者这个值
      如果return后面写了多个结果,,返回给调用者一个tuple(元祖),调用者可以直接使用解构获取多个变量

**函数的参数**

- [ ]   为什么说函数名的后面一定要跟括号呢?因为括号里面还要放很重要的东西——参数。(在参数刚开始被发明出来的时候,是没有参数,很快就引出来许多小伙伴们的质疑:函数不过是对做同样内容的代码进行打包,这样跟使用循环就没有什么本质上的区别了。所以为了使每次调用的函数可以有不同的实现,加入了参数的概念)
例如

```
   >>>def MyFirstFunction(name):
                  print(name + '是帅哥')
   ####################
   >>>def MyFIrstFunction('张三')##张三是帅哥
```

- [ ]      刚刚的例子只有一个函数,当然也可以使用多个函数,使用多个参数,只需要用逗号隔开即可。

```
   >>>def add_sum(num1,num2)
               return(num1+num2)
   ########################
   >>>res = add_sum(1,2)
   >>>print(res) ## 3
```

- [ ]   参数:参数从调用的角度来说,分为形式参数和实际参数。跟绝大多数编程语言一样,形参指的是函数创建和定义过程中小括号里的参数,而实参指的是函数在被调用的过程中传递进来的参数。
例如。(还有一个传参:给函数传递信息的时候将实际参数交给形式参数的过程被称为传参.)

```
    >>> def Function(name)
                print(name)
    >>>Function('张三')
    ##
    张三
```

- [ ]  关键字参数:普通的参数叫做位置参数,通常在调用一个函数的时候,粗心的程序员会将容易搞乱位置参数的顺序,已致函数的调用无法达到预期的效果,因此为了准确的传递参数,便有了关键词参数。

```
   def yue(chat, address, age):
              print("拿出手机")
              print("打开"+chat)
              print("找个"+address+"附近漂亮的"+str(age)+"岁妹子")
              yue(chat="微信", age=18, address="北京") # 关键字参数.
     结果:
    拿出手机
    打开微信
    找个北京附近漂亮的18岁妹子
```

> **总结**
> 1.位置参数
2.关键字参数
3.混合参数, 位置参数必须在关键字参数前面

- [ ] 默认参数:在函数声明的时候, 就可以给出函数参数的默认值. 在调用的时候可以 给出具体的值, 也可以不给值,

```
     def stu_info(name, age, sex='男'):
               print("录入学生信息")
               print(name, age, sex)
               print("录入完毕")
     stu_info("张强", 18)
     ##############
     录入学生信息
     '张强',18,'男'
      录入完毕
```

当然如果输入 (’张强‘,18,女)就可以将男覆盖掉

> 综上:
> 在形参的角度来看
> 位置参数
> 默认值参数(大多数传进来的参数都是一样的, 一般用默认参数

- [ ]  动态参数(可变参数/收集参数):发明这种参数的目的是函数的作者有时候也不知道这个函数需要多少个参数。。。。。

```
     def eat(a,b,c):
          print('我想吃%s%s%s'%(a,b,c))
     eat('米饭','面条','饺子')
     ############################# 等价
     def eat(*args):
           print('我想吃',args)
     eat('大米饭','中米饭','小米饭') # 收到的结果是一个tuple元祖
   ( 注意点:*号的变量会把所有的元素都存进元组中)
     #################
    def eat(*args,a,b):
           print('我想吃',args,a,b)
     eat('大米饭','中米饭','小米饭')
    结果:
    TypeError: eat() missing 2 required keyword-only arguments: 'a' and 'b'
   # eat函数在调用的时候发现缺少俩个位置参数没有进行传递

```

- [ ] 动态接收关键字参数:在python中可以动态的位置参数,但是这种情况只能接收位置参数无法接收关键字参数,在python中使用*来接收动态关键字参数

```

def func(**kwargs):
       print(kwargs)
func(a=1, b=2, c=3)
结果:
{'a': 1, 'b': 2, 'c': 3}
```

> 动态关键字参数最后获取的是一个dict字典形式  
顺序的问题, 在函数调用的时候, 如果先给出关键字参数, 则整个参数列表会报错.

```
def func(a,b,c,d):
print(a,b,c,d)
func(1,2,c=3,4)
结果:
File "D:/python_object/path2/test.py", line 806
func(1,2,c=3,4) ^
SyntaxError: positional argument follows keyword argument
```

> 关键参数必须要放在位置参数后边,由于实参是这个顺序,所以形参接收的时候也是这个顺序.也就是说位置参数必须在关键字参数前面.动态接收关键字参数也要在后面
>
> 最终顺序:
>
>   位置参数 > args(动态位置参数) > 默认值参数 > *kwargs(动态默认参数)
>
>   这四种参数可以任意的使用

- [ ] 函数的文档(函数的注释):

```
def exchangRate(dollar):
"""
美元--->人民币
汇率暂定为6.5 (对函数的注释)
"""
return dollar * 6.5

```
**函数的作用域**

- [ ] 作用域就是作用范围, 按照生效范围来看分为 全局作用域 和 局部作用域
   全局作用域: 包含内置命名空间和全局命名空间. 在整个文件的任何位置都可以使用(遵循 从上到下逐⾏执行).
   局部作用域: 在函数内部可以使用.
- [ ] 变量的作用域也就是所说的变量可见性。

```
def fun():
   a = 10
    print(a)
fun()
print(a) # a不存在了已经..
```

- [ ] 我们可以通过globals()函数来查看全局作⽤用域中的内容,也可以通过locals()来查看局部作 ⽤用域中的变量量和函数信息

```
a = 10
def func():
    a = 40
    b = 20
    print("哈哈")
    print(a, b)
    print(globals()) # 打印全局作用域中的内容
    print(locals()) # 打印局部作用域中的内容
func()
```
**以上就是函数的第一部分内容,感谢点击观看,欢迎评论**

python 基础学习笔记(6)--函数(1)的更多相关文章

  1. python基础学习笔记——初识函数

    什么是函数 我们目前为止,已经可以完成一些软件的基本功能了,那么我们来完成这样一个功能:约x 1 2 3 4 5 pint("拿出手机") print("打开陌陌&quo ...

  2. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  3. Python基础学习笔记(十一)函数、模块与包

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-functions.html 3. http://www.liao ...

  4. Python基础学习笔记(九)常用数据类型转换函数

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-variable-types.html 3. http://www ...

  5. Python基础学习笔记(八)常用字典内置函数和方法

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-dictionary.html 3. http://www.lia ...

  6. Python基础学习笔记(七)常用元组内置函数

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-tuples.html 3. http://www.liaoxue ...

  7. Python基础学习笔记(六)常用列表操作函数和方法

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-lists.html 3. http://www.liaoxuef ...

  8. python 基础学习笔记(1)

    声明:  本人是在校学生,自学python,也是刚刚开始学习,写博客纯属为了让自己整理知识点和关键内容,当然也希望可以通过我都博客来提醒一些零基础学习python的人们.若有什么不对,请大家及时指出, ...

  9. Python 基础学习笔记(超详细版)

    1.变量 python中变量很简单,不需要指定数据类型,直接使用等号定义就好.python变量里面存的是内存地址,也就是这个值存在内存里面的哪个地方,如果再把这个变量赋值给另一个变量,新的变量通过之前 ...

  10. Python基础学习笔记(十二)文件I/O

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-files-io.html ▶ 键盘输入 注意raw_input函 ...

随机推荐

  1. 压缩感知重构算法之SP算法python实现

    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

  2. three.js各种材质的实现源码

    three.js常用材质:基本材质.兰伯特材质.冯氏材质.标准材质. 我们可以自己使用着色器实现这些材质,用于批量渲染等用途. 为了简单,假设物体只有一张漫反射贴图,场景中只存在一个环境光和一个平行光 ...

  3. [TimLinux] JavaScript 如何在html标签的data-*属性使用JSON数据

    1. HTML data-*属性 H5引入的data-*属性,可以在JavaScript通过.dataset.*的方式来获取属性的值,例如: /* HTML标签: * <input id=&qu ...

  4. openlayers6结合geoserver实现地图空间查询(附源码下载)

    前言 之前写过一篇 openlayers4 版本的地图空间查询文章,但是由于是封装一层 js 代码写的,很多初学者看起来比较有点吃力,所以本篇文章重新写一篇地图空间查询文章,直接基于最新版本 open ...

  5. HDU1079 Calender Game

    Adam and Eve enter this year’s ACM International Collegiate Programming Contest. Last night, they pl ...

  6. Calamari 安装

    在CentOS 7 安装Calamari 2016年04月17日 18:59:06 lizhongwen1987 阅读数 8055更多 分类专栏: Ceph   版权声明:本文为博主原创文章,遵循CC ...

  7. 【Webpack】373- 一看就懂之 webpack 高级配置与优化

    本文原载于 SegmentFault 社区专栏 前海拾贝 作者:JS_Even_JS 一.打包多页面应用 所谓打包多页面,就是同时打包出多个 html 页面,打包多页面也是使用 html-webpac ...

  8. 【VMware】The VMX process exited permaturely

    问题现象: 开启虚拟机时出现如图问题:虚拟机退出过早 解决方法: 以管理员身份运行cmd,输入netsh winsock reset ,回车然后重启

  9. 如果你不了解Java的JVM,那真的很难进BAT一线大厂!

    前言 对于开发人员来说,如果不了解Java的JVM,那真的是很难写得一手好代码,很难查得一手好bug.同时,JVM也是面试环节的中重灾区.我们不能为了面试而面试,但是学习会这些核心知识你必定会成为面试 ...

  10. 测试开源.net 混淆器ConfuserEx

    由于公司业务需要简单的把代码加密混淆,于是了解了一下相关的工具然后打算用ConfuserEx试试. 开源地址:https://github.com/yck1509/ConfuserEx/ 下载地址:h ...