############################## 函数的定义 ################################
#print("hello world")
#min(2,3)
li = [1,2,3]
li.copy() ----->即函数
#目前学习需要缩进的:
# if,elif,else,for,while,def
#如何定义函数
"""
def print(self, *args, sep=' ', end='\n', file=None):
pass
def min(*args, key=None): # known special case of min
pass
总结:
def 函数名():
函数体
"""
#定义函数,并不会值型函数体里面的内容
del hellp():
print("hello")
print("python")
#调用函数的过程
hello()
#函数里嵌套函数
def villa():
print("is villa")
def messi():
print("is messi")
#建议在代码里面定义一个主函数
def main():
#name:定义函数时的变量,叫做形参,形参可以任意起名字
def welcom(name1): #name1 = "villa"
print("hello" + name1)
#"villa",真实的数据信息,调用函数时传的参数成为实参;
name2 = "messi" #name2为实参
welcome("villa")
def collatz(number):
print(number // 2 if number % 2 == 0 else 3 * number + 1)
################################## 函数动态添加成员 ########################
def fun():
print(fun.x)
fun()
#动态添加
fun.x = 3
fun()
#动态删除
del fun.x
fun()
####################### 函数形参之位置参数 #############################
#参数:形参,实参
#形参的分类:位置参数,默认参数,可变参数,关键字参数
#位置参数:形参和实参位置必须保持一致
def getInfo(name,age): ##按照位置传参数
print(name,age)
getInfo("name",12)
getInfo(age = 18,name = "villa")
#默认参数,形参实参可以不一致
def mypow(x,y=2):
"""
求x的y次方,y默认值为2
"""
print(x**y)
mypow(4)
mypow(4,3)
#可变参数
def mySum(*args):
"""
需求:用户可以传递任意个数值,计算数值的和
注意:*args是可变参数;(args可以接收任意值)
args是元组数据类型
args可以改成其他,因为是形参
sum = 0
for item in args:
sum +=item
"""
print(sum)
mySum(1,2,3,4)
#关键字参数
hobbies,gender
def getStuInfo(name,age,**kwargs):
"""
**kwargs(关键字)是一个字典,可以传递任意多的key-value对
"""
print(name,age)
print(kwargs)
getStuInfo("villa",35,hobbies = ["soccer","running"],gender = "female")
# 参数解包:*变量名,**变量名
score = (12,23,24,67,78,54)
print(minScore,*middleScore,maxScore)
print(minScore,middleScore,maxScore)
#对list tuple set解包时,只需要在变量前加*;
nums = [1,3,4,5,32,54]
nums1 = (1,23,1243,231,32)
nums2 = {1,2324,432,343,1}
mySum(*nums2)
#如果要对字典解包,一个星号,获取所有的key值;
d = dict(a=1,b=2)
print(*d)
print(**d)
getStuInfo("wetos",12,**d)
############################## 函数返回值 ######################
res1 = print("hello")
print("返回值:",res1)
返回值:none
res2 = min
#返回值:函数运算的结果,还需要进一步操作时,给一个返回值;
#return用来返回函数执行结果的,如果没有返回,默认为None(null,none)
#python可以间接返回多个值;原理:返回一个元组,将来对元组进行解包
#一旦遇到return,函数函数执行结束,后面的代码不会结束,(yield)
#默认参数,形参实参可以不一致
def mypow(x,y=2):
"""
求x的y次方,y默认值为2
"""
return x**y,x+y
mypow(4)
a = mypow(4,3)
print(a)
a = mypow(2,2)
print
print(type(a))
<class 'tuple'>
################################ 变量的作用域 ##########################
#局部变量:在函数内部定义的普通变量,只在函数内部起作用,函数执行结束,变量会自动删除。
- 可变数据类型:函数内部会影响外部变量的值
-不可变数据类型:函数内部不会影响外部变量的值
a = 1
print("outside",id(a))
def fun():
a = 5
print("inside",id(a))
fun()
print(a)
a = [1,2,3,4]
print("outside",id(a))
def fun():
a.append(5)
print("inside",id(a))
fun()
print(a)
#全局变量:
global
a = 1
print("outside",id(a))
def fun():
global a #声明a为全局变量
a = 5
print("inside",id(a))
fun()
print(a)
print(id(a))
#################################### 函数补充 ########################
def add(x:int,y:int) -> int:
#参数数据类型的判断
if isinstance(x,int) and isinstance(y,int):
return x + y
else:
return 'error'
return x + y
print(add(1.0,2.3))
#参数检测:
isinstance(1, int)
Out[4]: True
isinstance(1.0, int)
Out[5]: False
isinstance(1, (int, float))
Out[6]: True
isinstance(True, (int, float))
Out[7]: True
isinstance([1,2,3], (int, float))
Out[8]: False
#cmp函数在python2和python3的区别
>>>cmp(1,2)
-1
>>>cmp(1,1)
0
>>>cmp(2,1)
1
#函数名可以变为变量名
>>> sum = 0
>>> sum([1,2,3,4,5])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>> sum
0
>>> abs
<built-in function abs>
>>> abs(-10)
10
>>> a = abs
>>> a(-100)
100
#空函数
pass
#默认参数在指定时,必须是不可变数据类型,
eg:
def fun(li[])
li.append('End')
return li
解决:
def fun(None)
li = []
li.append('End')
return li
######################### 列表生成式 ##########################
#1.接收变量k,a,b
s = '51 5000 10000'
#['51','5000','10000']
#存储整形的k,a,b
#li = []
#for item in s.split():
li.append(int(item))
k,a,b = li
#k,a,b = [int{item} for item in s.split()]
#print(k,a,b)
需求2:生成一个列表,列表元素分别为[1**1,2**2,3**3....]
#li =[]
#for i in range(1,8):
# li.append(i**i)
#print(li)
print([i**i for i in range(1,8)])
总结:
[experssion(或函数) for item1 in 序列 if 判断语句
for item1 in 序列 if 判断语句
for item1 in 序列 if 判断语句
]
print([i**i for i in range(1,8) if i%2 == 0])
需求:将3*3d的矩阵转换为一维数组
3*3矩阵:[
[1,2,3],
[4,5,6],
[7,8,9]
]
一维数组:[1,2,3,4,5,6,7,8,9]
li= [
[1,2,3],
[4,5,6],
[7,8,9]
]
resLi = []
for item in li:
for item2 in item1:
resLi.append(item2)
print(resLi)
print([item2 for item1 in li for item2 in item1])