[Python入门到精通系列]-Python基础入门之函数
Posted 训练营资料福利官
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Python入门到精通系列]-Python基础入门之函数相关的知识,希望对你有一定的参考价值。
在上一篇文章中,我们通过一个案例展开,了解了Python数据类型、变量、条件控制等。这篇文章,继续沿着上一篇文章来了解Python的基础语法。
Python的实战案例
下面这个案例,是根据用户输入的数字进行排序输出,主要用到了函数、数组、循环等基础语法。
# coding=utf-8
#定义一个数组
l = []
# 定义一个函数,获得输入的数字并排序
def numSort(n):
for i in range(n):
x=int(input('Integer Number :'))
l.append(x)
l.sort()
# 获取用户输入排序数字个数
n=int(input('please input max sort num:'))
# 调用定义的numSort函数
numSort(n)
# 打印排序之后的数组
print(l)
上述代码运行的效果如下
please input max sort num:3
Integer Number :2
Integer Number :5
Integer Number :1
[1, 2, 5]
代码解析
上面这个案例中涉及到函数的定义、数组的排序方法、以及循环,我们先来了解什么是函数。
函数
什么叫函数?函数是一个组织好的、可重复使用的一段代码。举个生活中的例子,比如在传统的家居时代,我们每天回家后,会有几个必须要做的步骤:
•开灯•打开窗帘•打开电视。
在智能家居时代,我们可以通过场景化方式,在用户通过智能门锁的那一刻,自动完成上述三个步骤,伪代码如下。
def smart_home()
#开灯
#打开窗帘
#打开电视
我们把这三个常用的行文封装成一个函数,当开门的那一刻调用该函数完成这一系列动作。
因此,所谓的函数,就是能够提高应用模块性、代码重复利用率的一种机制,在Python中,有很多内建的函数,比如前面经常用的print
,用来打印一段内容到控制台。我们也可以自己创建函数,这种叫用户自定义函数。
如何定义一个函数
在Python应用开发中,定义函数shi是一个非常常见的行为,因此我们必须要直到如何去定义一个函数。
•函数代码块以def关键词开头,后面接函数标志符名称和圆括号。•任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用来定义参数•函数的第一行语句可以选择性的使用文档字符串来描述函数的功能说明•函数内容以冒号开始,并且缩进•如果一个函数有返回值,通过return [表达式]
来表示,如果不带return
表示返回none
。
def functionName( parameters ):
"文档字符串——这是一个演示函数"
函数内容的实现代码
return [expression]
默认情况下,函数值和函数名称是按函数声明中定义的顺序来匹配
了解了函数的定义后,再来看本篇文章开头的那个实例,代码如下。
def numSort(n):
for i in range(n):
x=int(input('Integer Number :'))
l.append(x)
l.sort()
通过def
定义了一个名字为numSort的函数,其中有一个参数为n
。
函数调用
一个函数被定义之后,可以被另外一个函数调用执行,也可以直接从python提示符执行,代码演示如下.
def print_hi(name):
print("Hi, 0".format(name))
if __name__ == '__main__':
print_hi('PyCharm')
这段代码是使用PyCharm工具默认创建的main.py生成的,其中就定义了一个print_hi
的函数,然后通过print_hi(‘PyCharm’)
调用了该函数,最终执行的结果其实就是print_hi
这个方法中通过print(“Hi,0”).format(name)
的值。
函数参数传递
在定义一个函数时,往往会涉及到外部参数的传递,比如前面的print_hi(name)
方法,它需要接收一个name
作为参数。这个参数name
本身没有类型,它的具体类型是根据传递进来的对象来决定。比如
name=[1,2,3]
name="PyCharm"
第一行代码的name是属于List类型,第二行代码PyCharm
是属于字符串类型,其实变量name
是没有类型的,它仅仅是一个对象的引用,可以指向List,也可以指向String。
但是需要注意的是,参数可以分为可变类型和不可变类型。
在Python中,String、Tuples、Numbers是不可变对象,而List、Dict是可变对象,这两者的区别在于在函数中是否可以更改参数的值,我们来举个例子。
def change(a):
a=10
b=2
change(b)
print b
这段代码中定义了一个函数change
并接收一个参数a
。接着定义一个变量b=2
,把b作为参数传递到change
函数中,接着在该函数中对传入的参数的值修改成10
,最后打印b
的结果。
2
这个现象说明b的值并没有被change
方法所改变,我们称这种类型的数据为不可变数据。
同样,我们可以使用另外一种可变对象来演示
# coding=utf-8
def change(list):
"doc-修改传入的list"
list.append([5,6])
print "函数内的数据结果:",list
return
l=[1,2,3,4]
change(l)
print "函数外打印list:",l
打印结果如下
函数内的数据结果: [1, 2, 3, 4, [5, 6]]
函数外打印list: [1, 2, 3, 4, [5, 6]]
从结果发现,可变对象被修改后,数据结果很明显发生了变化。
参数类型
在Python的函数中定义参数时,我们可以通过以下方式来定义不同的参数类型
1.必备参数必备参数时必须要按照正确的顺序传入参数,调用时的参数数量必须也函数声明的参数数量一致。
# coding=utf-8
def change(list):
"doc-修改传入的list"
list.append([5,6])
print "函数内的数据结果:",list
return
l=[1,2,3,4]
change() # 如果不传参数
print "函数外打印list:",l
上述代码会得到以下错误
Traceback (most recent call last):
File "/Users/mic/PycharmProjects/pythonProject/test05.py", line 10, in <module>
change()
TypeError: change() takes exactly 1 argument (0 given)
1.关键字参数关键字参数的意思是,使用函数传递参数的关键字名称来确定传入的参数值,这种方式允许参数传递顺序不一致
def change(a,b):
print "函数内的数据结果:",a,b
return
change(b=1,a=2)
打印的结果如下:
函数内的数据结果:2,1
也就是函数能够匹配到参数的关键字名称从而匹配对应的值。
1.默认参数默认参数是指如果没有传递参数值,则自动使用默认值,演示代码如下
def print_person(name,age=18):
print "Name:",name
print "age:",age
print_person(name='mic')
打印结果如下
Name: mic
age: 18
1.不定长参数不定长参数是说允许自动根据传入的参数值个数来匹配函数的参数个数,这种叫不定长参数,不定长参数只需要在参数前缀加一个*号就行。
def suite_params(*args):
for arg in args:
print arg
return
suite_params(1,2,3,4,5,6,7)
上述程序的执行结果为
1
2
3
4
5
6
7
可以看到我们在suite_params
方法中只声明了一个args
参数,但是由于它是不定长参数,所以可以接受不限制长度的参数个数。
接着我们调用suite_params
方法时传递了1-7这7个参数,在该方法中把这些数据打印出来。
循环
循环语句是任何编程语言中使用非常频繁的语法,它表示重复执行某个动作。
Python中提供了for循环
和while
循环两种方式。
while循环的使用
while循环是指在满足某个特定的条件下,用来循环执行某段程序,它的基本形式如下
while 判断条件(condition):
需要重复执行的代码
其中,判断条件可以是任何形式的表达式,只要结果返回的是一个true/false即可。任何非零、或非空(null)的值都是true
.
比如我们使用while循环来实现100个数的累加.
i=0 #定义两个int类型的变量
sum=0
while i<=100: #开启while循环,循环控制条件是`i<=100`。也就是只要i在这个区间内,就会一直循环
sum=sum+i # 累加1到100
i+=1 # 递增i的值
print(sum) #打印
如果我们希望只实现偶数的累加,或者我们希望循环50次的时候推出循环,怎么实现呢?这个时候就需要了解到while循环中的循环控制。
•break语句:在语句块执行过程中终止循环并且跳出整个循环•continue语句:在语句块执行过程中终止当前循环,跳出本次循环执行下次循环。
i=0
sum=0
while i<=100:
if(i==50): #当i的值为50时,则跳出循环
break;
sum=sum+i
i+=1
print(sum)
下面这段代码演示了continue的使用,就是如果i%2!=0
时,则跳出本次循环进入下一次循环。
i=0
sum=0
while i<=100:
i += 1
if(i%2!=0):
continue
sum=sum+i
print(sum)
循环使用else语句
在python中,while还有一种用法,语法为while…else
,表示while循环条件为false时,会执行else语句块。
# coding=utf-8
i=0
sum=0
while i<=100:
i += 1
if(i%2!=0):
continue
sum=sum+i
else:
print "代码执行结束"
print(sum)
for循环
for循环和while循环的功能是相同的,但是使用上有一些差别,它比较常用于对数组、字符串的数据遍历。
for iterating_var in sequence:
statements(s)
比如我们对一个字符串进行遍历
for c in 'Python':
print "当前字母:",c
或者对一个数组进行遍历
course = ['Java','AI','C#','Python','Golang']
for c in course:
print "当前科目:", c
打印结果如下
当前科目: Java
当前科目: AI
当前科目: C#
当前科目: Python
当前科目: Golang
for循环通过索引进行遍历
另外一种遍历方式是通过循环索引来遍历,演示代码如下
# coding=utf-8
course = ['Java','AI','C#','Python','Golang']
for index in range(len(course)):
print "当前科目:", course[index]
实现方式是一样的,不过这里用得是索引,而为了实现基于索引进行迭代,还用到了Python的内置函数len()
和range
。其中len()
返回列表长度,range
返回一个序列的数。
for循环使用else
在while中有else语句,for循环也同样包含else语句,意思和使用方法都相同
# coding=utf-8
course = ['Java','AI','C#','Python','Golang']
for index in range(len(course)):
print "当前科目:", course[index]
else:
print "end"
实战总结
学完上面Python的一些相关语法之后,再回过头来看这个例子就能够理解了。
# coding=utf-8
#定义一个数组
l = []
# 定义一个函数,获得输入的数字并排序
def numSort(n):
for i in range(n):
x=int(input('Integer Number :'))
l.append(x)
l.sort()
# 获取用户输入排序数字个数
n=int(input('please input max sort num:'))
# 调用定义的numSort函数
numSort(n)
# 打印排序之后的数组
print(l)
涉及到的功能点:
•l=[]
,表示定义一个数组
•numSort(n)
定义一个函数,这个函数传递一个参数n
•for i in range(n)
,遍历传入的n的长度值,表示要排序的元素个数,并通过input
获取用户输入的数字。
•l.sort()
方法用来实现数组排序。
以上是关于[Python入门到精通系列]-Python基础入门之函数的主要内容,如果未能解决你的问题,请参考以下文章
[Python入门到精通系列]-学会了Python的基础语法后,能做什么?
[Python入门到精通系列]-学会了Python的基础语法后,能做什么?
[Python入门到精通系列]-学会了Python的基础语法后,能做什么?