【python】程序结构

程序结构

    • 1 分支
      • 双向分支
        • input()
      • 多路分支
      • if语句其他:
    • 2 循环语句
      • for循环
        • 列表
        • range介绍
      • for-else语句
      • break,contineu,pass
      • while循环
    • 3 函数
      • 定义函数
      • 函数的参数和返回值
        • 参数详解
          • 默认参数
          • 关键字参数
          • 收集参数
          • 收集参数之关键字收集参数
          • 收集参数混合调用的顺序问题
          • 收集参数的解包问题
          • 同理,dict类型收集参数一样可以解包,但是
    • 4 返回值
    • 5 函数文档

1 分支

  • 分支的基本语法

      if 条件表达式:
          语句1
          语句2
          语句3
          ......
    
  • 条件表达式就是计算结果必须为布尔值的表达式

  • 表达式后面的冒号不能少

  • 注意if后面的出现的语句,如果属于if语句块,则必须同一个缩进等级

双向分支

  • if…else…语句

      if 条件表达式:
          语句1
          语句2
          ...
      else:
          语句1
          语句2
          .....
    
  • 双向分支有两个分支,当程序执行到if … else…语句的时候,一定会执行if或else中的一个,也仅执行一个

  • 缩进问题,if和else一个层级,其余语句一个层级

input()

  • 在屏幕上输出括号内的字符串
  • 接受用户输入的内容并返回到程序
  • input返回的内容一定是字符串类型
gender = input("请输入性别:")
print("你输入的性别是:{0}".format(gender))  #{}表示这里是添加的字符串,0表示第一个字符串

score = input("请输入学生成绩:")
# 需要把str转换成int
score = int(score)

多路分支

  • 很多分支的情况,简称多路分支

      if  条件表达式:
          语句1
          ....
      elif 条件表达式:
          语句1
          ...
      elif 条件表达式:
          语句1
          ...
          
      .....
      else:
          语句1
          ....
    
  • elif 可以由很多个

  • else可选

  • 多路分支只会选一个执行

if语句其他:

  • if语句可以嵌套使用,但不推荐
  • python没有switch-case语句

2 循环语句

  • 重复执行某些固定动作或者处理基本固定的事物
  • 分类
    • for循环
    • while循环

for循环

  • for循环

      for 变量 in 序列:
          语句1
          语句2
          ...
    

列表

  • 列表就是一列数字或者其他值,一般用中括号表示
  • 例如 [‘zhangsan’, ‘lisi’, ‘wangwu’,‘jingjing’]
# 打印学生列表姓名
for name in  ['zhangsan', 'lisi', 'wangwu','jingjing']:
    print(name)
            zhangsan
            lisi
            wangwu
            jingjing

range介绍

  • 生成一个数字序列
  • 具体范围可以设定

range(1,5) #代表从1到5(不包含5)
[1, 2, 3, 4]

range(1,5,2) #代表从1到5,间隔2(不包含5)
[1, 3]

range(5) #代表从0到5(不包含5)
[0, 1, 2, 3, 4]

for-else语句

  • 当for循环结束的时候,会执行else语句
  • else语句是可选语句

break,contineu,pass

  • break: 无条件结束整个循环,简称循环猝死
  • continue:无条件结束本次循环,从新进入下一轮循环
  • pass:表示略过,通常用于站位

while循环

    while 条件表达式:
        语句块
        
    #另外一种表达方法
    while  条件表达式:
        语句块1
    else:
        语句块2

3 函数

定义函数

def func():
    print("我是一个函数")
    print("我要完成一定功能")
print("我结束了")
  • 调用函数的时候,不会输出“我结束了”

函数的参数和返回值

  • 参数: 负责给函数传递一些必要的数据或者信息
    • 形参(形式参数): 在函数定义的时候用到的参数没有具体值,只是一个占位的符号,成为形参
    • 实参(实际参数): 在调用函数的时候输入的值
  • 返回值: 函数的执行结果
    • 使用return关键字
    • 如果没有return,默认返回一个None
    • 函数一旦执行return语句,则无条件返回,即结束函数的执行

参数详解

  • 参数分类
    • 普通参数
    • 默认参数
    • 关键字参数
    • 收集参数
默认参数
- 形参带有默认值
- 调用的时候,如果没有对相应形参赋值,则使用默认值

            def  func_name(p1=v1, p2=v2..........):
                func_block
                
            #调用1
            func_name()
            
            # 调用2
            value1= 100
            value2=200
            func_name(value1,value2)
关键字参数
  • 语法

      def func(p1=v1, p2=v2.....):
          func_body
          
      调用函数:
      func(p1=value1, p2=value2.......)
    
  • 比较麻烦,但也有好处:

    • 不容易混淆, 一般实参和形参只是按照位置一一对应即可,容易出错
    • 使用关键字参数,可以不考虑参数位置
收集参数
  • 把没有位置,不能和定义时的参数位置相对应的参数,放入一个特定的数据结构中

  • 语法

      def func(*args):
          func_body
          按照list使用方式访问args得到传入的参数
          
      调用:
      func(p1, p2, p3, .....)
    
  • 参数名args不是必须这么写,但是,我们推荐直接用args,约定俗成

  • 参数名args前需要由星号

  • 收集参数可以和其他参数共存

# 收集参数代码
# 函数模拟一个学生进行自我介绍,但具体内容不清楚
# args把他看做一个list
def stu( *args):
    print("Hello 大家好,我自我介绍以下,简答说两句:")
    # type函数作用是检测变量的类型
    print(type(args))
    for item in args:
        print(item)

stu("liuying", 18, "北京大通州区", "wangxiaojing", "single")
Hello 大家好,我自我介绍以下,简答说两句:

liuying
18
北京大通州区
wangxiaojing
single
收集参数之关键字收集参数
  • 把关键字参数按字典格式存入收集参数

  • 语法:

      def func( **kwargs):
          func_body
          
      # 调用:
      func(p1=v1, p2=v2, p3=v3........)
    
  • kwargs一般约定俗成

  • 调用的时候,把多余的关键字参数放入kwargs

  • 访问kwargs需要按字典格式访问

# 收集参数案例
# 自我介绍
# 调用的时候需要使用关键字参数调用
def stu( **kwargs):
    # 在函数体内对于kwargs的使用不用带星号
    print("Hello 大家好,我先自我介绍一下:")
    print(type(kwargs))
    # 对于字典的访问,python2 和python3有区别
    for k,v in kwargs.items():
        print(k, "---", v)
    
stu(name="liuying",  age=19, addr="北京大通州区", lover="王晓静", work="Teacher")

print("*" * 50)

stu(name="周大神")
收集参数混合调用的顺序问题
  • 收集参数,关键字参数,普通参数可以混合使用
  • 使用规则就是,普通参数和关键字参数优先
  • 定义的时候一般找普通参数,关键字参数,收集参数tuple,收集参数dict
收集参数的解包问题
  • 把参数放入list或者字典中,直接把list/dict中的值放入收集参数中
  • 语法:参看案例
# 收集参数的解包问题

def stu(*args):
    print("哈哈哈哈哈")
    # n 用来表示循环次数
    # 主要用来调试
    n = 0
    for i in args:
        print(type(i))
        print(n)
        n += 1
        print(i)

#stu("liuying", "liuxiaoyhing", 19, 200)
l = ["liuying", 19, 23, "wangxiaojing"]
 
#stu(l)
# 此时,args的表示形式是字典内一个list类型的元素,即 arg = (["liuying", 19, 23, "wangxiaojing"],)
# 很显然跟我们最初的想法违背

# 此时的调用,我们就需要解包符号,即调用的时候前面加一个星号
stu(*l)
同理,dict类型收集参数一样可以解包,但是
  • 对dict类型进行解包
  • 需要用两个星号进行解包

4 返回值

  • 函数和过程的区别
    • 有无返回值
  • 需要用return显示返回内容,
  • 如果没有返回,则默认返回None
  • 推荐写法,无论有无返回值,最后都要以return 结束

5 函数文档

  • 函数的文档的作用是对当前函数提供使用相关的参考信息
  • 文档的写法:
    • 在函数内部开始的第一行使用三引号字符串定义符
    • 一般具有特定格式
    • 参看案例
  • 文档查看
    • 使用help函数,形如 help(func)
    • 使用__doc__, 参看案例

def stu(name, age):
    '''
    这是文档的文字内容
    :param name: 表示学生的姓名
    :param age: 表示学生的年龄
    :return: 此函数没有返回值
    '''
    pass
print(help(stu))
print("*" * 20)
print(stu.__doc__)
Help on function stu in module __main__:

stu(name, age)
    这是文档的文字内容
    :param name: 表示学生的姓名
    :param age: 表示学生的年龄
    :return: 此函数没有返回值

None
********************

    这是文档的文字内容
    :param name: 表示学生的姓名
    :param age: 表示学生的年龄
    :return: 此函数没有返回值

你可能感兴趣的:(Python)