|
| 1 | +# 4-1 python函数定义 基础用法 |
| 2 | +函数,咱们可以理解成一个具有魔法功能的黑盒子,里面具体放的是什么东西?咱们不用去管它,只用明白,怎么样去用这个盒子,和用这个盒子能做什么就可以了 |
| 3 | + |
| 4 | +函数: 函数是一个组织好的代码段,可以在其它地方重复使用 |
| 5 | + |
| 6 | +- **封装 使用者,只需要了解调用的名称,及传参、返回值即可实现对应的功能,比如咱们代码中常用的print函数** |
| 7 | +- **复用 相同功能的代码,只用写一次,其它地方只需要调用即可,最大程度上降低无用代码的产生,方便后期功能优化的批量修改** |
| 8 | + |
| 9 | +主要作用: |
| 10 | + |
| 11 | +1.减少重复代码 |
| 12 | + |
| 13 | +2.方便修改,更易于扩展(加减功能) |
| 14 | + |
| 15 | +3.保持代码一致性(就一段代码,一改,所有调用这个函数的都改了) |
| 16 | +## 1.怎么样定义一个函数 |
| 17 | +python提供了简单的方法,让你可以自定义一个自己的函数,函数的定义,有以下规则: |
| 18 | + |
| 19 | +- 以def做为定义函数的开头关键字,函数名后要用()结束 |
| 20 | +- 所有需要传递的参数,必须放在()括号中间 |
| 21 | +- 函数名不能以数字开头 |
| 22 | +- return 当函数需要有返回值时或者想中间退出时,用retrn返回标识 |
| 23 | +- 函数名不能用系统关键字 |
| 24 | +- 函数的调用,以函数名()括号 |
| 25 | +```python |
| 26 | + # 函数的定义 |
| 27 | + |
| 28 | + def 函数名(): # 函数名前带def关键字定义函数,后面要跟冒号 : |
| 29 | + 语句1 # 空格缩进,是属于函数体内部的语句 |
| 30 | + 语句2 # 空格缩进,函数体内部的语句 |
| 31 | + 语句3 # 不需要结束符,只要缩进都是函数体内的语句 |
| 32 | + return 变量 # 最终函数的返回值,就是结果是什么? |
| 33 | + ``` |
| 34 | +## 2.函数的作用域 |
| 35 | +- 外部不能访问函数内部变量 |
| 36 | +- 函数内部不能修改外部变量 ( 强行修改需要加 global 外部变量 = 新值 ) |
| 37 | +- 函数内部和函数外部变量名可以相同,但需要注意访问优先级 |
| 38 | +### 定义一个不带参数没有返回值的函数 |
| 39 | +### 代码区 1 |
| 40 | +```python |
| 41 | +1 def hello(): |
| 42 | +2 print('我是一个函数') |
| 43 | +3 print('我有两行代码') |
| 44 | +4 |
| 45 | +5 hello() |
| 46 | +6 |
| 47 | +``` |
| 48 | + |
| 49 | +```python |
| 50 | +我是一个函数 |
| 51 | +我有两行代码 |
| 52 | +``` |
| 53 | +### 函数的调用 |
| 54 | +### 代码区 2 |
| 55 | +```python |
| 56 | +1 # 函数: 带参数的函数 |
| 57 | +2 |
| 58 | +3 def calc(x): #定义一个函数,含有参数x |
| 59 | +4 return x*2-1 #对x进行了一些运算,并返回最后结果 |
| 60 | +5 |
| 61 | +6 print(calc(3)) # x=3 时,3*2-1=5 |
| 62 | +7 print(calc(10)) # x=10时,10*2-1=19 |
| 63 | +8 |
| 64 | +``` |
| 65 | + |
| 66 | +```python |
| 67 | +5 |
| 68 | +19 |
| 69 | +``` |
| 70 | +### 函数传递参数 |
| 71 | +python的参数的传参类型有 |
| 72 | +- 必备参数 即必须按照函数定义时的参数顺序进行依次传递 |
| 73 | +- 关键字参数 可以通过指定参数名,对参数进行赋值(个人比较喜欢这一种,这样可以不用考 虑参数的先后顺序,另外能清晰的知道每个参数具体传的什么值) |
| 74 | +- 默认参数 当有参数的某个值,不需要必传时,可以定义默认值 |
| 75 | +### 代码区 3 |
| 76 | +```python |
| 77 | +1 # 定义一个带参数的函数,用来计算 x 与 y的差 |
| 78 | +2 def calc(x, y=0): #默认y=0,也就是说如果你不传y参数,默认值就是0 |
| 79 | +3 return x - y #函数返回值 x-y |
| 80 | +4 |
| 81 | +5 print(calc(5, 3)) #x,y都传了,返回5-3=2 |
| 82 | +6 print(calc(5)) #只传了x, 返回5-0=5 |
| 83 | +7 |
| 84 | +``` |
| 85 | + |
| 86 | +```python |
| 87 | +2 |
| 88 | +5 |
| 89 | +``` |
| 90 | +### 代码区 4 |
| 91 | +```python |
| 92 | + 1 # 函数功能演示: 奇数生成器 |
| 93 | + 2 import random #导入系统内置random模块 |
| 94 | + 3 |
| 95 | + 4 def jnum(n=100): # 定义一个函数-奇数生成器,默认参数 n=100 |
| 96 | + 5 while True: # 不断死循环,只到生成的是奇数为止 |
| 97 | + 6 x=random.randint(1,n) # 从 1~100 随机生成一个数 这是random的功能 |
| 98 | + 7 if x%2==1: return x # 如果x不能被2整除,说明是奇数,退出整个函数,同时也退出while循环了 |
| 99 | + 8 |
| 100 | + 9 for i in range(5): |
| 101 | +10 print('100内奇数',jnum()) # 循环5次,生成100以内的5个奇数 (n=函数默认值) |
| 102 | +11 |
| 103 | +12 print('10以内的奇数',jnum(10)) # 正常调用jsum(N=10),生成10以内的奇数 |
| 104 | +13 |
| 105 | +14 #大家可以多点几次运行,每次的结果都不一样 |
| 106 | +15 |
| 107 | +``` |
| 108 | + |
| 109 | +```python |
| 110 | +100内奇数 77 |
| 111 | +100内奇数 35 |
| 112 | +100内奇数 23 |
| 113 | +100内奇数 79 |
| 114 | +100内奇数 1 |
| 115 | +10以内的奇数 7 |
| 116 | +``` |
| 117 | +### 代码区 4 |
| 118 | +```python |
| 119 | +1 # 函数功能演示: π的计算 |
| 120 | +2 def PI(n=20): |
| 121 | +3 p=0 # π的计算很麻烦,所以我们定义一个函数,把复杂的运算方法包装好了 |
| 122 | +4 for k in range(n): # n是运算后π精度,n=20的精度就足够用了 |
| 123 | +5 p += 1/pow(16, k) * (4 / (8 * k + 1) - 2 /(8 * k + 4) - 1/(8 * k + 5) - 1 /(8 * k + 6)) |
| 124 | +6 return p |
| 125 | +7 |
| 126 | +8 print(PI()) # 这样,当需要计算π的时候,不管细节,只管调用这个 PI()函数即可 |
| 127 | +9 |
| 128 | +``` |
| 129 | + |
| 130 | +```python |
| 131 | +3.141592653589793 |
| 132 | +``` |
| 133 | +### 代码区 5 |
| 134 | +```python |
| 135 | +1 # 练习题 定义一个带默认值参数的函数,计算两个数的乘积 |
| 136 | +2 |
| 137 | +``` |
| 138 | + |
| 139 | + |
| 140 | + |
| 141 | + |
| 142 | + |
| 143 | + |
| 144 | + |
| 145 | + |
| 146 | + |
0 commit comments