## **函数(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. HDU-6119

    度度熊喜欢着喵哈哈村的大明星——星星小姐. 为什么度度熊会喜欢星星小姐呢? 首先星星小姐笑起来非常动人,其次星星小姐唱歌也非常好听. 但这都不是最重要的,最重要的是,星星小姐拍的一手好代码! 于是度度 ...

  2. windows上安装和使用ab压测工具

    ApacheBench是一款压力测试工具,用于测试http服务器请求的性能情况. 官方下载链接:https://www.apachehaus.com/cgi-bin/download.plx 百度云: ...

  3. 通过Centreon监控apache、MySQL、Hadoop服务状态

    在上面的章节中,只是简单介绍了Centreon的几个基础监控项,例如添加主机.服务等,这些对于一个监控系统来说是远远不够的,本节将重点介绍对一些扩展服务的监控,也就是对一些常见应用的监控. 一. Na ...

  4. django学习01-建project和app

    按装完成后,执行命令 django-admin startproject mysite 建一个名字为mysite的工程.运行 python manage.py runserver 启动网络服务器,然后 ...

  5. 【Vuejs】269- 提升90%加载速度——vuecli下的首屏性能优化

    前言 之前用 ,所以接下来还会介绍一些它们在优化上的异同 分析 vuecli 2.x自带了分析工具只要运行 npm run build --report 如果是 vuecli 3的话,先安装插件 cn ...

  6. ruby 构建API接口流程代码

    来源:https://ruby-china.org/topics/25822 1.创建新项目 rails new api_demo 2.生成控制器: # 我们不需要生成资源文件 $ bundle ex ...

  7. wc命令统计目录下所有文件行数

    想统计一下最近一个项目的代码行数,一个一个文件统计显然不是程序员的思维,wc命令可以统计一个文本的行数,结合find命令可以实现我的需求(注意符号):

  8. Codeforces Round #591 (Div. 2)

    A. CME 题目链接:https://codeforces.com/contest/1241/problem/A 题意: 你有 N 根火柴 , 多少根火柴就可以组成多大的数(如 三根火柴可以表示 3 ...

  9. 约数之和(POJ1845 Sumdiv)

    最近应老延的要求再刷<算法进阶指南>(不得不说这本书不错)...这道题花费了较长时间~(当然也因为我太弱了)所以就写个比较易懂的题解啦~ 原题链接:POJ1845 翻译版题目(其实是AcW ...

  10. ubuntu14.04编译vim8.1

    安装依赖 这一步其实我没做,直接下载编译成功了.估计有些包不是必需的.姑且列在这里供参考 sudo apt install libncurses5-dev libgnome2-dev libgnome ...