Python学习——循环(for迭代循环)、推导式、函数

目录

一.for的迭代循环

1.可迭代对象

2.嵌套循环的综合练习

二.语句、循环优化和并行迭代

1.break

2.continue

3.else

4.循环代码优化

5.并行迭代

三.推导式创建序列

1.列表推导式

2.字典推导式

3.集合推导式

4.生成器推导式(生成元组)

5. 综合练习

四.函数用法和底层分析

1.函数的定义和调用

2.形参和实参

3.文档字符串

4.返回值

5.函数也是对象,函数的内存底层分析

6.变量的作用域

8.几种函数

五.参数

1.参数的传递

2.传递可变对象的引用

3.传递不可变对象的引用

4.浅拷贝和深拷贝

5.传递不可变对象包含的子对象是可变的情况

6.参数的几种类型


一.for的迭代循环

for i in (10,20,30):
    print(i*10)

1.可迭代对象

(1)序列

包含:字符串、列表、元组

(2). 字典

(3). 迭代器对象(iterator)

(4). 生成器函数(generator)

(5). 文件对象

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: 39572
@file: mypy_01.py
@time: 2020/09/29
@desc:
"""
for i in (10,20,30):#遍历元组
    print(i*10)

for x in "lin hai xin beautiful !":#遍历字符串
    print(x)

for a in ["林海馨","真好看!","说的对!"]:#遍历列表
    print(a)

d={"姓名":"林海馨","性别":"女","美貌程度":"10级"}
for b in d:#遍历字典的所有键
    print(b)
for c in d.values():#遍历字典的所有值
    print(c)
for e in d.items():#遍历字典的整个键值对
    print(e)
  • range 对象是一个迭代器对象,用来产生指定范围的数字序列。格式为: range(start, end [,step]),end参数必须设置,start参数不设置时默认从0开始,步长默认为1。
#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: 39572
@file: mypy_02.py
@time: 2020/09/29
@desc:
"""
sum=0
even_sum=0
odd_sum=0
for i in range(1,101):
    sum+=i
    if(i%2==0):
        even_sum+=i
    else:odd_sum+=i
print("1-100的整数和为:{0}".format(sum))
print("1-100的偶数和为:{0}".format(even_sum))
print("1-100的奇数和为:{0}".format(odd_sum))

2.嵌套循环的综合练习

一个循环体内可以嵌入另一个循环,一般称为“嵌套循环”,或者“多重循环”

for x in range(5):#0 1 2 3 4
    for y in range(5):#0 1 2 3 4
       # print(y)
        print(x,end="\t")#/t为制表符,在不使用表格的情况下,上下对齐
    print()#换行
    '''
    出现表格时使用两个参数进行表格的表示
    '''

 利用循环嵌套打印9*9乘法表

for x in range(1,10):
    for y in range(1,x+1):
        print("{0}*{1}={2}".format(x,y,(x*y)),end="\t")
    print()

二.语句、循环优化和并行迭代

1.break

break 语句可用于 while 和 for 循环,用来结束整个循环。当有嵌套循环时,break 语句只 能跳出最近一层的循环。

while True:
    a=input("请输入一个字符(输入Q/q则退出系统):")
    if a.upper()=='Q':
        #此处为upper()函数,注意要加上括号
        print("循环结束,已退出!")
        break
    else:
        print(a)

2.continue

continue 语句用于结束本次循环,继续下一次。多个循环嵌套时,continue 也是应用于最 近的一层循环。

eg:要求输入员工的薪资,若薪资小于 0 则重新输入。最后打印出录入员工的数量薪资明细,以及平均薪资

整体思路:要求输出四个值,则先定义四个空值。continue表示此次循环终止,但是整个循环没有终止,break表示整个循环终止,不再进行循环。要注意循环的缩进问题。

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: 39572
@file: mypy_07.py
@time: 2020/09/29
@desc:
"""
staff_num=0
salerys=[]
ave_salery=0
sum_salery=0

while True:
    a = input("请输入您的薪资(输入Q/q则代表录入完成):")  # 此处input函数已经遗忘,需要复习
    if a.upper()=="Q":
        print("录入完成。")
        break
    if float(a)<0:
        print("您输入的工资有误,请重新输入")
        continue
    staff_num+=1
    salerys.append(float(a))
    sum_salery+=float(a)
    ave_salery=sum_salery/staff_num
print("员工人数:{0}".format(staff_num))
print("员工工资总数:{0}".format(sum_salery))
print("员工工资:{0}".format(salerys))
print("员工平均工资:{0}".format(ave_salery))

3.else

while、for 循环可以附带一个 else 语句(可选)。如果 for、while 语句没有被 break 语句 结束,则会执行 else 子句,否则不执行。

语法格式如下:

     while 条件表达式:

     循环体 else: 语句块 

eg:员工一共 4 人。录入这 4 位员工的薪资。全部录入后,打印提示“您已经全部录 入 4 名员工的薪资”。最后,打印输出录入的薪资平均薪资。

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: 39572
@file: mypy_08.py
@time: 2020/09/29
@desc:
"""
salerys=[]#列表的定义忘记
ave_salerys=0
sum_salerys=0
sum_staffs=0
while True:
    a=input("请输入员工的工资:")
    if float(a)<0:
        print("输入有误,请重新输入:")
        continue
    sum_staffs+=1
    salerys.append(float(a))
    sum_salerys+=float(a)
    ave_salerys=sum_salerys/sum_staffs
    if int(sum_staffs) > 3:
        print("录入完毕!")
        break
print("员工工资详情:{0}".format(salerys))
print("员工总工资:{0}".format(sum_salerys))
print("员工平均工资:{0}".format(ave_salerys))





4.循环代码优化

  • 优化的规则:1.减少循环内部的计算环节

2.尽量减少内部循环的计算,尽可能往外提

3.局部变量查询较快,尽量使用局部变量

import time
start_time=0
end_time=0
start_time=time.time()

for i in range(1,1000):
    A=[]
    for j in range(1,10000):
        A.append(i*1000+j*1000)
print("计算结果为:{0}".format(i*1000+j*100))
end_time=time.time()
print("总计消耗时间:{0}".format(end_time-start_time))

start_time=time.time()
for a in range(1,1000):
    B=[]
    c=a*1000
    for b in range(1,10000):
        B.append(c+b*1000)
print("计算结果为:{0}".format(a*1000+b*100))
end_time=time.time()
print("总计消耗时间:{0}".format(end_time-start_time))
  •  其他优化手段

1. 连接多个字符串&#

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值