作用域、yield 、元祖、字典

函数:

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值