1. 函数定义
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
def定义函数
比如:
def fun():
print "hello"
- 调用函数,直接调用之前定义的
In [3]: fun()
hello
- 再举一个复杂一点的例子,定义sth函数判断是否数字:
In [4]: def fun():
...: sth = raw_input("input a num: ")
...: try:
...: if type(int(sth)) == type(1):
...: print "%s is a num " %sth
...: except:
...: print "%s is not a num" %sth
try和excpet用来判断
执行结果:
In [5]: fun()
input a num: 1a
1a is not a num
In [6]: fun()
input a num: 5
5 is a num
2. 函数参数
形式参数:定义函数时括号内的变量,也称形参
实际参数:调用函数时括号内的变量,也称实参
举例1:
In [14]: def fun(x,y):
....: if x >= y:
....: print "%s is bigger" %x
....: else:
....: print "%s is bigger" %y
....:
执行结果:
In [15]: fun(3,3)
3 is bigger
In [16]: fun(3,4)
4 is bigger
In [17]: fun(3,2)
3 is bigger
- 举例2:
#!/usr/bin/python
# -*- coding:utf8 -*-
# author: chawn
# date:
import sys
def isNum(n): #定义函数最好类似这么写
for i in n:
if i in "0123456789":
pass #占位
else:
print "%s is not a num" %n
sys.exit() #跳出整个程序
else:
print "%s is a num" %n
isNum(sys.argv[1])
sys.argv[1]输出第一个参数,[0]是程序名本身,[1]是第一个参数,以此类推
执行结果:
[root@t1 py]# python 1.py 5
5 is a num
[root@t1 py]# python 1.py 5a
5a is not a num
- 练习:
打印所有的pid,利用os.listdir('/proc')
os.listdir(‘’)的参数是目录,返回值是列表
#!/usr/bin/python
# -*- coding:utf8 -*-
# author: chawn
# date:
import sys
import os #要调用os.listdir
def isNum(n):
for i in n:
if i in "0123456789":
pass
else:
break
else:
print n,
for i in os.listdir('/proc'): #调用函数
isNum(i)
对比和之前的不同,执行结果:
[root@t1 py]# python 1.py
1 2 3 7 8 9 10 11 12 13 17 18 19 20 21 22 23 24 25 26 32 33 34 35 36 44 46 47 49 68 103 243 244 245 253 254 255 256 257 258 259 285 286 287 288 289 290 291 292 293 294 371 396 400 417 473 474 475 476 477 478 479 480 497 521 524 527 529 535 538 542 544 567 579 583 843 845 861 863 936 938 940 988 997 1131 1132 1212 1215 1216 1217 1218 1219 1220 1221 1416 2007 2107 2169 2354 2357 2361 2362 2363 2364 2365 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2424 2441 27313 27377 27606 30097 30241 31524 31551 31568 31570 31631 31922 31924 31941 31972 31974 31991 32071 32358 32359 32361 32378 32404 32415 32417 32454 32455 32480 32488
3. 默认参数(缺省参数)
- def(x,y=100),这里的y是默认参数
举例:
In [21]: def fun(x=2,y=3):
....: print x+y
....:
In [22]: fun()
5
In [23]: fun(1) #输入一个参数的话,默认是对应左边的
4
In [24]: fun(1,2)
3
举例:
In [28]: def fun(x=2,y):
....: print x+y
....:
File "", line 1
def fun(x=2,y):
SyntaxError: non-default argument follows default argument
不能这样定义def fun(x=2,y)
举例:
In [29]: def fun(x,y=2):
....: print x+y
....:
In [30]: fun(1,4)
5
In [31]: fun(1)
3
对比上面
4.练习
习题
- 设计一个函数,统计任意一串字符串中数字字符的个数
例如:
"adfdfjv1jl;2jlk1j2" 数字个数为3个
- 设计函数,统计任意一串字符串中每个字母的个数,不区分大小写
例如:
"aaabbbcccaae111"
a 5个
b 3个
c 3个
e 1个
1.解答。可以扩展写:
首先来看两个函数,
s=input("please inupt string")
print(s.isdigit()) #用isdigit函数判断是否数字
print(s.isalpha()) #isalpha判断是否字母
print(not (s.isalpha() or s.isdigit()) and s.isalnum()) #isalnum判断是否数字和字母的组合
代码:
#!/usr/bin/python
# -*- coding:utf8 -*-
# author: chawn
# date:
intCount = 0 #用来记录列表中的int元素个数
strCount = 0 #记录str元素个数
otherCount = 0
a = raw_input("plz input a string:")
# 使用for循环遍历字符串,每次循环判断当前获取的元素的类型,并给对应计数器计数
for i in a:
if i.isdigit(): #判断i是不是int
intCount += 1
elif i.isalpha(): #判断i是不是str
strCount += 1
else:
otherCount += 1
print "数字=%d,字母=%d,其他=%d" % (intCount,strCount,otherCount)
执行结果:
C:\Users\chawn\PycharmProjects\pyex\venv\Scripts\python.exe C:/Users/chawn/PycharmProjects/pyex/180103/判断字符串的数字个数.py
plz input a string:111aaaadffg**++++
数字=3,字母=8,其他=6
Process finished with exit code 0
- 解答
def getLettersCount(text):
text = text.upper() #转换成大写
dict1 = dict() #创建空字典
for i in string.ascii_uppercase:
dict1.setdefault(i, 0) #将26个字母当做key增加到字典中,value为0
for i in xrange(0, len(text)): #遍历字符串
if text[i] in string.ascii_uppercase: #如果在26个字母中
dict1[text[i]] += 1 #value加1
for k in dict1:
if dict1[k] != 0: #不为0的字母,打印出来
print("{0} {1}".format(k, dict1[k]))