Skip to content

Commit 2dbc653

Browse files
committed
Signed-off-by: twowater <[email protected]>
1 parent dd79284 commit 2dbc653

File tree

8 files changed

+468
-2
lines changed

8 files changed

+468
-2
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@
1212
|草根学 Python(二)基本数据类型和变量|[掘金](https://juejin.im/post/5946b7f25c497d006bef5704)[简书](http://www.jianshu.com/p/b5388a6c2e72)[CSDN](http://blog.csdn.net/Two_Water/article/details/73478060)[个人博客](http://twowater.com.cn/2017/06/19/%E8%8D%89%E6%A0%B9%E5%AD%A6Python-%E4%BA%8C-%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E5%92%8C%E5%8F%98%E9%87%8F/)|
1313
|草根学 Python(三)List 和 Tuple|[掘金](https://juejin.im/post/593fdb87128fe1006a02ce92)[简书](http://www.jianshu.com/p/97c97d5a5a7c)[CSDN](http://blog.csdn.net/Two_Water/article/details/73524367)[个人博客](http://twowater.com.cn/2017/06/21/%E8%8D%89%E6%A0%B9%E5%AD%A6Python-%E4%B8%89-List-%E5%92%8C-Tuple/)|
1414
|草根学Python(四) Dict 和 Set|[掘金](https://juejin.im/post/5947bf84ac502e5490e4a6a1)[简书](http://www.jianshu.com/p/90f5b897ce77)[CSDN](http://blog.csdn.net/two_water/article/details/73719026)[个人博客](http://twowater.com.cn/2017/06/25/%E8%8D%89%E6%A0%B9%E5%AD%A6Python-%E5%9B%9B-Dict-%E5%92%8C-Set/)|
15-
|草根学Python(五) 条件语句和循环语句|[掘金](https://juejin.im/post/594c6c52f265da6c1f75f164)[简书](http://www.jianshu.com/p/2b80009b1e8c)[CSDN](http://blog.csdn.net/Two_Water/article/details/73762517)[个人博客](http://twowater.com.cn/2017/06/27/%E8%8D%89%E6%A0%B9%E5%AD%A6Python-%E4%BA%94-%E6%9D%A1%E4%BB%B6%E8%AF%AD%E5%8F%A5%E5%92%8C%E5%BE%AA%E7%8E%AF%E8%AF%AD%E5%8F%A5/)|
15+
|草根学Python(五) 条件语句和循环语句|[掘金](https://juejin.im/post/594c6c52f265da6c1f75f164)[简书](http://www.jianshu.com/p/2b80009b1e8c)[CSDN](http://blog.csdn.net/Two_Water/article/details/73762517)[个人博客](http://twowater.com.cn/2017/06/27/%E8%8D%89%E6%A0%B9%E5%AD%A6Python-%E4%BA%94-%E6%9D%A1%E4%BB%B6%E8%AF%AD%E5%8F%A5%E5%92%8C%E5%BE%AA%E7%8E%AF%E8%AF%AD%E5%8F%A5/)|
16+
|草根学Python(六) 函数|[掘金](https://juejin.im/post/5946784461ff4b006cf1d8ec)[简书](http://www.jianshu.com/p/d8f2a55edc75)[CSDN](http://blog.csdn.net/Two_Water/article/details/73865622)[个人博客](http://twowater.com.cn/2017/06/29/%E8%8D%89%E6%A0%B9%E5%AD%A6Python-%E5%85%AD-%E5%87%BD%E6%95%B0/)|

SUMMARY.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,10 @@
2424
* [条件语句和循环语句](/python5/Preface.md)
2525
* [一、条件语句](/python5/If.md)
2626
* [二、循环语句](/python5/Cycle.md)
27-
* [三、条件语句和循环语句综合实例](/python5/Example.md)
27+
* [三、条件语句和循环语句综合实例](/python5/Example.md)
28+
* [函数](/python6/Preface.md)
29+
* [一、Python 自定义函数的基本步骤](/python6/1.md)
30+
* [二、函数传值问题](/python6/2.md)
31+
* [三、函数返回值](/python6/3.md)
32+
* [四、函数的参数](/python6/4.md)
33+
* [五、匿名函数](/python6/5.md)

python6/1.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# 一、Python 自定义函数的基本步骤 #
2+
3+
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
4+
5+
自定义函数,基本有以下规则步骤:
6+
7+
* 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
8+
* 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数
9+
* 函数的第一行语句可以选择性地使用文档字符串(用于存放函数说明)
10+
* 函数内容以冒号起始,并且缩进
11+
* return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的 return 相当于返回 None。
12+
13+
语法示例:
14+
15+
```python
16+
def functionname( parameters ):
17+
"函数_文档字符串"
18+
function_suite
19+
return [expression]
20+
```
21+
22+
实例:
23+
24+
1. def 定义一个函数,给定一个函数名 sum
25+
2. 声明两个参数 num1 和 num2
26+
3. 函数的第一行语句进行函数说明:两数之和
27+
4. 最终 return 语句结束函数,并返回两数之和
28+
29+
```python
30+
def sum(num1,num2):
31+
"两数之和"
32+
return num1+num2
33+
34+
# 调用函数
35+
print(sum(5,6))
36+
```
37+
38+
输出结果:
39+
40+
```python
41+
11
42+
```

python6/2.md

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
# 二、函数传值问题 #
2+
3+
先看一个例子:
4+
5+
```python
6+
# -*- coding: UTF-8 -*-
7+
def chagne_number( b ):
8+
b = 1000
9+
10+
b = 1
11+
chagne_number(b)
12+
print( b )
13+
```
14+
15+
最后输出的结果为:
16+
17+
```txt
18+
1
19+
```
20+
21+
这里可能有些人会有疑问,为啥不是通过函数`chagne_number`更改了 b
22+
的值吗?为啥没有变化,输出的结果还是 1 ,这个问题很多编程语言都会讲到,原理解释也是差不多的。
23+
24+
这里主要是函数参数的传递中,传递的是类型对象,之前也介绍了 Python 中基本的数据类型等。而这些类型对象可以分为可更改类型和不可更改的类型
25+
26+
在 Python 中,字符串,整形,浮点型,tuple 是不可更改的对象,而 list , dict 等是可以更改的对象。
27+
28+
例如:
29+
30+
**不可更改的类型**:变量赋值 `a = 1`,其实就是生成一个整形对象 1 ,然后变量 a 指向 1,当 `a = 1000` 其实就是再生成一个整形对象 1000,然后改变 a 的指向,不再指向整形对象 1 ,而是指向 1000,最后 1 会被丢弃
31+
32+
**可更改的类型**:变量赋值 `a = [1,2,3,4,5,6]` ,就是生成一个对象 list ,list 里面有 6 个元素,而变量 a 指向 list ,`a[2] = 5`则是将 list a 的第三个元素值更改,这里跟上面是不同的,并不是将 a 重新指向,而是直接修改 list 中的元素值。
33+
34+
![指向问题](https://user-gold-cdn.xitu.io/2017/6/27/d23fb1478065a0bcc19949cfbc88c5a0)
35+
36+
这也将影响到函数中参数的传递了:
37+
38+
**不可更改的类型**:类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是 a 的值,没有影响 a 对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
39+
40+
**可更改的类型**:类似 c++ 的引用传递,如 列表,字典。如 fun(a),则是将 a 真正的传过去,修改后 fun 外部的 a 也会受影响
41+
42+
因此,在一开始的例子中,`b = 1`,创建了一个整形对象 1 ,变量 b 指向了这个对象,然后通过函数 chagne_number 时,按传值的方式复制了变量 b ,传递的只是 b 的值,并没有影响到 b 的本身。具体可以看下修改后的实例,通过打印的结果更好的理解。
43+
44+
```python
45+
# -*- coding: UTF-8 -*-
46+
def chagne_number( b ):
47+
print('函数中一开始 b 的值:{}' .format( b ) )
48+
b = 1000
49+
print('函数中 b 赋值后的值:{}' .format( b ) )
50+
51+
52+
b = 1
53+
chagne_number( b )
54+
print( '最后输出 b 的值:{}' .format( b ) )
55+
56+
57+
```
58+
59+
打印的结果:
60+
61+
```txt
62+
函数中一开始 b 的值:1
63+
函数中 b 赋值后的值:1000
64+
最后输出 b 的值:1
65+
```
66+
67+
当然,如果参数中的是可更改的类型,那么调用了这个函数后,原来的值也会被更改,具体实例如下:
68+
69+
```python
70+
# -*- coding: UTF-8 -*-
71+
72+
def chagne_list( b ):
73+
print('函数中一开始 b 的值:{}' .format( b ) )
74+
b.append(1000)
75+
print('函数中 b 赋值后的值:{}' .format( b ) )
76+
77+
78+
b = [1,2,3,4,5]
79+
chagne_list( b )
80+
print( '最后输出 b 的值:{}' .format( b ) )
81+
82+
```
83+
84+
输出的结果:
85+
86+
```txt
87+
函数中一开始 b 的值:[1, 2, 3, 4, 5]
88+
函数中 b 赋值后的值:[1, 2, 3, 4, 5, 1000]
89+
最后输出 b 的值:[1, 2, 3, 4, 5, 1000]
90+
```

python6/3.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# 三、函数返回值 #
2+
3+
通过上面的学习,可以知道通过 return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的 return 语句返回 None。
4+
5+
具体示例:
6+
7+
```python
8+
# -*- coding: UTF-8 -*-
9+
10+
def sum(num1,num2):
11+
# 两数之和
12+
if not (isinstance (num1,(int ,float)) or isinstance (num2,(int ,float))):
13+
raise TypeError('参数类型错误')
14+
return num1+num2
15+
16+
print(sum(1,2))
17+
```
18+
19+
返回结果:
20+
21+
```txt
22+
3
23+
```
24+
25+
这个示例,还通过内置函数`isinstance()`进行数据类型检查,检查调用函数时参数是否是整形和浮点型。如果参数类型不对,会报错,提示 `参数类型错误`,如图:
26+
27+
![检查函数参数是否正确](https://user-gold-cdn.xitu.io/2017/6/28/d844f6a7b80370797dfea8f251f2a709)
28+
29+
当然,函数也可以返回多个值,具体实例如下:
30+
31+
```python
32+
# -*- coding: UTF-8 -*-
33+
34+
def division ( num1, num2 ):
35+
# 求商与余数
36+
a = num1 % num2
37+
b = (num1-a) / num2
38+
return b , a
39+
40+
num1 , num2 = division(9,4)
41+
tuple1 = division(9,4)
42+
43+
print (num1,num2)
44+
print (tuple1)
45+
```
46+
47+
输出的值:
48+
49+
```txt
50+
2.0 1
51+
(2.0, 1)
52+
```
53+
54+
认真观察就可以发现,尽管从第一个输出值来看,返回了多个值,实际上是先创建了一个元组然后返回的。回忆一下,元组是可以直接用逗号来创建的,观察例子中的 ruturn ,可以发现实际上我们使用的是逗号来生成一个元组。

0 commit comments

Comments
 (0)