## **函数(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. HDU5002 tree

    You are given a tree with N nodes which are numbered by integers 1..N. Each node is associated with ...

  2. CF1009F Dominant Indices(启发式合并)

    You are given a rooted undirected tree consisting of nn vertices. Vertex 11 is the root. Let's denot ...

  3. jmeter微信公众号接口测试实例

    线程组 HTTP Cookie 管理器 HTTP 请求默认值 用户定义的变量 察看结果树 HTTP请求 响应断言 正则表达式提取器 线程组 HTTP Cookie 管理器 HTTP 请求默认值 用户定 ...

  4. [Cake] 3. dotnet 本地工具 cake & dotnet format

    在上一篇[Cake] 2. dotnet 全局工具 cake中介绍了通过.Net Core 2.1 的全局工具dotnet tool命令来简化cake的安装和使用.因为是全局安装,则无法适应每个项目对 ...

  5. 常见的web安全问题总结

    we安全对于web前端从事人员也是一个特别重要的一个知识点,也是面试的时候,面试官经常问的安全前端问题.掌握一些web安全知识,提供安全防范意识,今天就会从几个方面说起前端web攻击和防御的常用手段 ...

  6. svn下载多模块及依赖框架的项目

    安装TortoiseSVN之后,在新建的文件里右键svn checkout 输入公司配给的svn地址.用户名.密码 需要分模块下载的项目在地址后面的三个...中选择需要下载的项目,点击OK等待下载完成

  7. 深度剖析YOLO系列的原理

    深度剖析YOLO系列的原理 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/12072225.html 目录 1. ...

  8. Redis-API

    Redis-API 简介 Redis 是一个基于内存的高效的键值行非关系型数据库,存取效率极高. python提供了两个类:分别为Redis和StrictRedis来实现Redis的命令操作.Redi ...

  9. CMU-14445 数据库原理 汇总

    LAB1:Extendible Hash Table, LRU, BUFFER POOL MANAGER LAB2:实现一个支持并发操作的B+树 LAB3:事务隔离,two-phase locking ...

  10. Android 布局阴影实现

    最近项目要求,ui有很多有关于阴影的设计要求,网上找了些实现方式,但都不是很理想.现在闲下来了,就寻思着自己写个阴影布局耍耍,以备后用.先说道说道我找到的几种阴影实现方式: 系统阴影 Andorid ...