def count_upper_letters(n):
"判断n中有多少个大写字母"
import string
result=0
if not isinstance(n,str):
return
for i in n:
if i in string.ascii_uppercase:
result+=1
return result
print(count_upper_letters("jfFeiEFAEG"))
import time
import random
def count_multi_float_multiply_time():
"计算随机的一万个小数相乘,所产生的的耗时"
start_time=time.time()
for i in range(10000):
random.random()*random.random()
end_time=time.time()
return end_time-start_time
print("函数的调用时间是%s秒" %int(count_multi_float_multiply_time()))
1.有参函数:必备参数、命名参数、缺省参数、不定长参数。
2.list的引用和复制
>>> a=[1,2,3]
>>> b=a #引用
>>> b is a
True
>>> c=a[:] #复制
>>> c
[1, 2, 3]
>>> c is a
False
3.函数传参,参数是不可变类型,则函数外变量和内变量不相互关联,即修改后互不影响。
参数是可变类型,那么函数外变量和内变量有关联关系,修改后相互影响。
可变:列表、集合、字典
不可变:元组、数字、字符串
>>> a=10 #不可变参数
>>> def func(s):
... a=s+100
... print(a)
...
>>> func(a)
110
>>> a #互不影响
10
>>> a=[] #可变参数
>>> def func(s):
... s.append(100)
... print(s)
...
>>> func(a)
[100]
>>> a #相互影响
[100]
*练习:写一个函数,打印10个“*”,通过参数指定打印行数,默认值5.
def print_stars(n=5):
if not isinstance(n,int):
return
for i in range(n):
print("*"*10)
print(print_stars("j"))
print(print_stars(7))
*建议,不要使用可变类型的值作为默认参数值
def add_end(L=[]):
#修改
"""
def add_end(L=None):
if L is None:
L=[]
"""
L.append("end")
return L
print(add_end([1,2,3]))
print(add_end(["x","y","z"]))
print(add_end())
print(add_end())
print(add_end())
"""运行结果:默认参数如果是可变类型,那么所有的默认值调用都会操作内存中同一个变量值
[1, 2, 3, 'end']
['x', 'y', 'z', 'end']
['end'] #调用正常
['end', 'end'] #调用不正常
['end', 'end', 'end'] #调用不正常
"""
*练习:写一个函数,参数传入一个字符串,统计一下数字个数,数字排重后,返回个数和出现的数字。
def count_int(a=None):
if not isinstance (a,str):
return None
count=0
number_list=[]
for i in a:
if i in "0123456789":
count+=1
number_list.append(i)
number_list=list(set(number_list))
return count,number_list
print(count_int("jeiefifa1322"))
*获取函数提示信息
>>> def add():
... "加法"
... return
...
>>>
>>> add.__doc__
'加法'
>>> add
<function add at 0x0000018E66562948>
>>>