函数:
python
def f(a=0, b=0): # def f(*args): 可变参数 ,参数不确定
return a + b # total = 0
# for val in args:
# return total
mylist = [1,3,5,10,20]
print(f(*mylist)) ## 列表拆散当成可变参数用 要加*号
def f(*args): # 可变参数 ,参数不确定
total = 0
for val in args:
total += val
return total
mylist = [1,3,5,10,20]
print(f(*mylist))
作用域 - LEGB (先局部、嵌套、再全局)
a = 100
def f():
global a # 把两百放到全局取
a = 200
b = 'hello'
def g():
nonlocal b
b = 'good'
模块 字符串 列表
mylist = [x ** 2 for x in range(1,10)]
mylist = mylist + [20,30]
内存管理
栈 - 变量 -地址 - 对象的引用 堆 - 真正的对象 id() is 静态区
def f(*args): # 可变参数 ,参数不确定
total = 0
for val in args:
total += val
return total
mylist = [1,3,5,10,20]
print(f(*mylist))
## 引用技术 python用的垃圾自动处理
import sys
list1 = [0] * 10
list2 = list1
list3 = list2
print(sys.getsizeof(list1))
print(sys.getrefcount(list1)) ##分析占了多少空间
del list2
del list3
del list1[0]
print(sys.getrefcount(list1))
结果
144
4
2
mylist = [x ** 2 for x in range(1,10)]
mylist = mylist + [20,30]
print(mylist)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 20, 30]
## 给学生名字和成绩 输出最高成绩
def main():
names = ['关羽','张飞','赵云','马超','貂蝉']
subjects = ['语文','数学','Python']
# table = [[0 for _ in range(3)] for _ in range(5)]
#
table = []
for row, name in enumerate(names):
print('请输入%s的成绩:'% name)
scores = []
for col ,subject in enumerate(subjects):
score = int(input('%s: '% subject))
scores.append(scores)
table.append(scores)
print(table)
if __name__ == '__main__':
main()
排序:
def main():
set1 = {'hello','good','bananna','zoo','Python','hello'}
print(len(set1))
x = sorted(set1)
print(type(x))
print(x)
list1 = list(set1)
print(list1)
# 元组、集合、列表可以相互转换
list2 = [1,2,3,1,2,4]
set2 = set(list2) ## 列表 转集合
print(set2)
tuple1 = (1,1,2,3,4,4)
list3 = list(tuple1) ## 元组转 列表
print(list3)
if __name__ == '__main__':
main()
约瑟夫环问题
30人 数到9就over 最后或者的都是基督徒 求: 30人怎么站的
def main():
persons = [True] * 30
counter = 0 #
index = 0
number = 0
while counter < 15: # 杀死15人
if persons[index]: # 检查是否活着
number += 1 # 活着就报数
if number == 9:
persons[index] = False # 该人死了
counter += 1 # 死的人加1
number = 0
index += 1 # 死了就要往后开始报数
index %= 30 ## 对30求余数0 保证一直到0-29之间
for person in persons:
print('基'if person else '非',end= '')
if __name__ == '__main__':
main()
ex: 设计一个函数传入年月日返回这一天是这一年的第几天
def is_leap_year(year):
"""
计算传入的日期是这一年的第几天
:param year: 年
:param month: 月
:param data: 日
:return: 第几天
"""
return year % 4 == 0 and year % 100 !=0 or year %400 == 0
def which_day(year,month,date):
day_of_month = [[31,28,31,30,31,30,31,31,30,31,30,31],
[31,29,31,30,31,30,31,31,30,31,30,31]
][is_leap_year(year)] ## 布尔值当下标,系统会自动把True当1,Flase当0
total = 0
for index in range(month - 1):
total += day_of_month[index]
return total + date
if __name__ == '__main__':
print(which_day(2016,3,1))
print(which_day(1981, 12, 31))
yield 的用法
def fib(n): ## 斐波拉切数
a,b = 0,1
for _ in range(n):
a,b = b,a + b ## 把b的值赋给a ,a + b的值赋给b
yield a ## 生成器函数 ,产生一个生成器函数
f = fib(20)
print(f)
for val in fib(20):
print(val)
元组:
def main():
list1 = [1,1,2,2,3,3] # 列表
print(list1)
tuple1 = (1,1,2,2,3,3) # 元组
print(tuple1)
set1 = {1,1,2,2,3,3} # 集合
set2 = {1,3,5,7,9}
print(set2)
set3 = set1.intersection(set2)
print(set3)
set3 = set1.union(set2)
print(set3)
set3 = set1.difference(set2)
print(set3)
set3 = set2.difference(set1)
print(set3)
set3 = set1.symmetric_difference(set2)
print(set3)
for val in set2:
print(val)
if 3 in set2:
set2.remove(3)
print(set2)
print(set2.issubset(set1))
if __name__ == '__main__':
main()
字典:
def main():
dict1 = {'name':'骆昊','age':38,'gender': True}
print(dict1['name'])
print(dict1['age'])
print(dict1['gender'])
dict1['name'] = '王大锤'
print(dict1)
dict1.update(height=175,fav=['吃','喝']) ##增加更新
print(dict1.pop('age')) ## 删除
print(dict1.popitem()) ## 删除 建 组队
print(dict1)
# 不能使用del dict1 断开引用对象,垃圾会自动清理
dict1.setdefault('motto','shit is japanese favorite')
for x in dict1:
print(x,':', dict1[x]) ## 设置默认字典
if __name__ == '__main__':
main()