一、什么叫函数
1.函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给他取一个名字。
可以通过函数名在程序的不同地方多次执行。(函数调用)
函数分为预定义函数和自定义函数。
预定义函数可以直接使用。 自定义函数需要,是用户自己编写。
2.为什么要使用函数?
(1)降低编程的难度。
通常将一个复杂的大问题分解成一系列的小问题,然后将小问题划分成更小的问题,当问题细化为足够简单时,我们就可以分而治之。各个小问题解决了,大问题就迎刃而解了。
(2)代码重用
避免重复劳作,提高效率。
二、定义函数
1.函数的定义和调用
def 函数名([参数列表]): //定义函数
函数名([参数列表]) //调用函数
函数名的命令也有规则,和变量一样
1.只能是一个词。
2.只能包含字母、数字、和下划线。
3.不能以数字开头。
4.不可以使用关键字。
如果是多个单词,第二个单词首字母大写。
def fun():
print('hello world')
定义一个函数,判断用户是否输入的是数字
def fun():
sth = raw_input("please input a number: ")
try:
if type(int(sth)) == type(1):
print("%s is a number" %sth)
except:
print("%s is not number" %sth)
fun()
程序思路:
1.如何判断输入的是否是纯数字。可以使用type函数来判断,在用int函数来转换成int型,判断是否是int 整数型。 type(1) 得到的结果就是int
2.try 和 except 这是异常语句。使用了这个可以对报错的代码,也会继续 执行下去而不会报错,不执行后面的代码。
try是捕获异常,在try里的代码执行如果出错后,就会执行在execpt里的代码。
三、函数的参数
1.参数分为形式参数和实际参数
形式参数:在定义函数时,函数名后面括号中的变量名称叫做“形式参数”,或者称为“形参”
实际参数:在调用函数时,函数名后面括号中的变量名称叫做“实际参数”,或者称为“实参”
def fun(x, y):
if x > y:
print x
else:
print y
这x , y 就是形参。执行一下。
fun(5,3) 这就是实际参数。定义了几个形参,就要输入几个实参。
多输入或者少输入都会报错。
在来看一个例子,也是判断是否是数字。
import sys
def isNum(s):
for i in s:
if i in '0123456789':
pass
else:
print("%s is not a number" %s)
sys.exit()
else:
print("%s is a number" %s)
isNum(sys.argv[1])
程序思路:
1.这里用到了sys模块 sys模块中的argv方法。这个方法的作用是,返回一个列表, 里面包含了文件名,和参数。
import sys
print sys.argv
打印一下看看argv返回的东西。
返回的是一个列表,列表的值都是字符串。是列表的话就可以进行切片取数
print sys.argv[1] 取第一个参数,这样结果不管输入了多少个参数都会取第一个参数出来。
我们的判断是否是数字脚本就是通过对这个argv的[1]的值进行判断。
2.使用for 循环来遍历每个数字进行匹配,如果不是数字,直接退出脚本。当整个循环匹配完成后,输出第二个else里的语句。
再来看一个小例子,打印系统所有的pid。从/proc里读取。
import sys
import os
def isNum(s):
for i in s:
if i in '0123456789':
pass
else:
break
else:
print(s)
for i in os.listdir('/proc'):
isNum(i)
程序思路:
1.这里用到了一个OS模块里的listdir()属性方法,这个方法的作用返回列表,列表里的值是目标目录里的所有文件夹。返回的属性是string。
import os
print(os.listdir('/proc')),
打印出了proc文件目录下的所有文件夹。不包括.和 ..文件夹
我们就可以对这个列表做一下判断排除非数字的文件夹。
2.通过for循环来使得i 接收,因为i变量就是上面函数的s参数。s是一个形参,而i是一个实际参数。i 是 os.listdir里的每个参数,i在通过isNum函数来处理一下,判断是否为数字。
四、函数的默认参数
1.函数的默认参数也就是缺省参数。比如
def fun(x, y=100):
print x + y
y参数就是一个默认参数,如果不给y实际参数 y就会从默认参数中读取。
当y有实际参数时,就会替换默认参数。
当函数里的参数只有一个的话,实际参数的值会给x,y为默认值,相加 x + 100
如果函数里有2个实际参数,那么就是这2个实际参数相加
2.还可以这样传参:
fun(x=20,y=30)
但是这样去传参数的话必须对应形参,形参是x 那么实际参数也要x= 。名字要一致。不然会报错。
3.设置2个默认参数
def fun(x=2,y=3):
print x+y
直接执行不带参数可以用默认参数去运行。写了实际参数后,就会代替默认参数。
如果只有一个实际参数的话,会对第一个形式参数去对应。
如果把第一个参数做为默认参数,会报错。提示没有默认参数,默认参数只能是最后,在最后的形参上,不能在最前,中间,一定要在最后。
习题:
1. 设计一个函数,统计任意一串字符串中数字字符的个数
例如:
"adfdfjv1jl;2jlk1j2" 数字个数为3个
def countNum():
num = raw_input("please input something: ")
count = 0
for i in num:
if i in '1234567890':
count+=1
print("{0} 数字个数为{1}个".format(num,count))
countNum()
2. 设计函数,统计任意一串字符串中每个字母的个数,不区分大小写
例如:
"aaabbbcccaae111"
a 5个
b 3个
c 3个
e 1个
import string
def checkAbc_count():
num = raw_input("please input something: ")
dict1 = dict()
num = num.upper()
for i in xrange(0,len(num)):
if num[i] in string.ascii_uppercase:
if dict1.has_key(num[i]) != False:
dict1[num[i]] += 1
else:
dict1[num[i]] = 1
for k in dict1:
print("{0} {1}".format(k,dict1[k]))
checkAbc_count()