1定义函数
如果不主动调用函数,函数是不会执行的
def say_hello():
print 'hello1'
print 'hello2'
print 'hello3'
say_hello()
eg:对两个数进行求和
def sum_2_sum()
num=10
num=20
result=num1+num2
print '%d+%d=&d'%(num1,num2,result)
sum_2_sum()
2函数参数的使用
在函数名后面的小括号内填写参数多个参数之间用,分隔dedefide
形参出现与最开始,可以取任何名字
在函数调用时,传递的参数称为实参数
def sum_2_sum(sum1,sum2):
result=num1+num2
print '%d+%d=%d'%(num1,num2,result)
sum_2_sum(5,20)
eg:
编写一个名为collatz()的函数,他有一个名为number的参数,
如果参数是偶数,那么collatz()就打印出number//2
如果number是奇数,collatz()就打印出3*number+1
def collatz(number):
if number%2==0:
print number//2
else:
print 3*number+1
collatz(4)
3参数形参值四大参数:位置参数 默认参数 可变参数 关键字参数
https://www.cnblogs.com/VseYoung/p/python_def.html 供参考
定义和调用都应遵循:
先位置参数,默认参数,包裹位置,包裹关键字(定义和调用都应遵循)
位置参数:形参和实参个数必须保持一致
def print_hello(name, sex): sex_dict = {1: u'先生', 2: u'女士'} print 'hello %s %s, welcome to python world!' %(name, sex_dict.get(sex, u'先生')) # 两个参数的顺序必须一一对应,且少一个参数都不可以 # print_hello('tanggu', 1)
默认参数:形参和时参个数不同
eg:求x的y次方,y的默认值为2
def mypow(x,y=2):
print x**y
mypow(4)
默认形参可以改变:mypow(4,3)
可变参数:
def mysum(*agrs)
"""
*args是可变参数
args是元组的类型的数据
args名字可变(因为是形参,所以可变)
"""
print sgrs
sum=0
for item in agrs
sum+=item
print sum
num=(1,2,35,78)
mysum(*nums)
*num解包
关键字参数:
def getStuInfo(name,age,**kwargs):
"""
**kwargs是一个字典,可以传递多对key—value对
"""
print name,age
print kwargs
getStuInfo('westos',18,hobbies=['code','runner'])
4,返回值:
函数运算的结果,还需要进一步操作时,给一个返回值return
用来返回函数执行结果的,如果没有返回值,默认为None,python
可以间接返回多个值(返回一个元组)一旦遇到return,函数执行结束
后面的代码不会执行
def mypoow():
return x**y,x+y
print 'hello'
a=mypow(3)
print a
5,函数变量的作用域
局部变量:在函数内部定义普通变量,只在函数内部作用,函数执行结束会自动删除
a=1
print 'outside',id(a)
def fun():
global a#声明a为全剧变量
print a
print 'inside:',id(a)
fun()
print a
print id(a)
eg:
def test(num):
print '在函数内部%d对应的内存地址时作%d'%(num,id(num))
result='hello'
print '函数要返回的数据的内存地址是%d'%id(result)
return result
a=10
print 'a变量保存数据的内存地址是%d'%id(a)
r=test(a)
print '%s的内存地址是%d'%(r,id(r))
eg:
(1)编写一个函数cacluate,可以接收任意多个数,返回是一个元组
元组的第一个数为左右参数的平均值,第一个参数是大于平均值的所有数
(2)编写函数,接收一个列表(包含30个整数)和一个整数k,返回一个新的、
列表,函数需求:
将列表下标k之前对应(不包含k)的元素逆序
将先下标k及之后的元素逆序
[1,2,3,4,5] 3 [2,1,5,4,3]
(3)模拟轮盘抽奖游戏
轮盘分为三部分: 一等奖, 二等奖和三等奖;
轮盘转的时候是随机的,
如果范围在[0,0.08)之间,代表一等奖,
如果范围在[0.08,0.3)之间,代表2等奖,
如果范围在[0, 1.0)之间,代表3等奖,
模拟本次活动1000人参加, 模拟游戏时需要准备各等级奖品的个数.
6函数装饰器
在不改变原函数的基础上,给函数增加功能"
把一个函数当作参数,返回一个替代版的函数
本质上:返回函数的函数
后续单独整理
7,列表生成式:
功能老强大了,一句话解决列表的生成
(1):找出1~10之间的所有偶数,并且返回一个列表(包含以这个偶数为半径的圆的面积)
li = []
for r in range(2, 11, 2): # [2,4,6,8,10]
square = math.pi * r * r
li.append(square)
print li
print [math.pi * r * r for r in range(2, 11, 2)]
(2):找出1~10之间的所有奇数,并且返回一个列表(所有的奇数转换为字符串)
print [str(r) for r in range(1,11,2)]
(3)自己定义函数并且引用
找出1~num之间的所有质数
def isPrime(num):
for i in range(2,num):
if num % i == 0:
return False
else:
return True
print [i for i in range(2,101) if isPrime(i)]
8,字典生成式:
#1.假设有20个学生,学分在60~100之间,筛选出成绩在90分以上的学生
import random
stuInfo = {}
for i in range(20):
name = 'westos' + str(i)
score = random.randint(60,100)
stuInfo[name] = score
stuInfo['west9os'+str(i)] = random.randint(60,100)
hightscore = {}
for name,score in stuInfo.items():
if score > 90:
hightscore[name] = score
print hightscore
stuInfo = {'westos'+ str(i):random.randint(60,100) for i in range(20)}
print {name:score for name,score in stuInfo.items() if score >90}
2.将字典中的key值和value值调换
d = {'a':'apple','b':'bob','c':'cat'}
print {v:k for k,v in d.items()}
key值全部变为大写
print {k:k.upper()for k,v in d.items()}
3.大小写合并,key值最终全部为小写
d1 = {'A':10,'b':3,'a':5,'B':8,'d':1}
print {k.lower():d1.get(k.upper(),0)+d1.get(k.lower(),0)for k,v in d1.items()}