## **函数(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. MyBatis_多表关联查询_resultMap_单个对象_N+1方式实现

    mapper 层 提供 StudentMapper 和 ClazzMapper, StudentMapper 查询所有学生信息, ClazzMapper 根据编号查询班级信息. 再 StudentMa ...

  2. Zookeeper选取机制

    1)半数机制:集群中半数以上机器存活,集群可用.所以Zookeeper适合安装奇数台服务器. 2)Zookeeper虽然在配置文件中并没有指定Master和Slave.但是,Zookeeper工作时, ...

  3. [状态模式]实现stopwatch

    1.模拟传统面向对象语言的状态模式实现 // Stopwatch类 状态机class Stopwatch {    constructor() {        this.button1 = null ...

  4. 【JS】368- 浅析JavaScript异步

    一直以来都知道 JavaScript是一门单线程语言,在笔试过程中不断的遇到一些输出结果的问题,考量的是对异步编程掌握情况.一般被问到异步的时候脑子里第一反应就是 Ajax, setTimseout. ...

  5. 大数据学习笔记——Linux基本知识及指令(理论部分)

    Linux学习笔记整理 上一篇博客中,我们详细地整理了如何从0部署一套Linux操作系统,那么这一篇就承接上篇文章,我们仔细地把Linux的一些基础知识以及常用指令(包括一小部分高级命令)做一个梳理, ...

  6. Mybatis需要注意的细节

    mybatis第二篇 1.${}和#{}的区别 1.#在传参的时候,会自动拼接单引号:$不能拼接单引号; 2.$传参时,一般不支持jdbcType指定类型的写法;#则可以;如: ​ #{name,jd ...

  7. B树?这篇文章彻底看懂了!

    前言 索引,相信大多数人已经相当熟悉了,很多人都知道 MySQL 的索引主要以 B+ 树为主,但是要问到为什么用 B+ 树,恐怕很少有人能把前因后果讲述完整.本文就来从头到尾介绍下数据库的索引. 索引 ...

  8. centos7 启动停止命令

    apache启动systemctl start httpd停止systemctl stop httpd重启systemctl restart httpd mysql启动systemctl start ...

  9. android studio 点击后,不打开上次的项目,

    取消勾选Reopen last project on startup选项,

  10. 简单实现vue列表点击某个高亮显示

    比如ul下有4个li元素. 给每个li绑定点击事件@click="select_li(index),然后这个点击时间会将一个全局变量 selectLi 赋值为 index 的值. 然后在每个 ...