1.控制语句

1.1 条件控制:if..else

# 判断年龄
def checkAge(age):
if age > 30:
return "您老了~"
else:
return "正年轻~"

if __name__ == "__main__":
print("age = 20", checkAge(20))
print("age = 40", checkAge(40))

# age = 20 正年轻~
# age = 40 您老了~

1.2 条件控制:if..elif..else

def checkScore(score):
if score > 90:
return "优秀"
elif score >= 70:
return "良"
elif score >= 60:
return "及格"
else:
return "差"


if __name__ == "__main__":
print("score = 95", checkScore(95))
print("score = 80", checkScore(80))
print("score = 65", checkScore(65))
print("score = 43", checkScore(43))

# score = 95 优秀
# score = 80 良
# score = 65 及格
# score = 43 差

@注意点: python中没有switch…case

1.3 循环控制: for | while

if __name__ == "__main__":
language = ["Java", "Php", "Go", "Python"]
# 使用for
for n in language:
print("for:", n)

# 使用while
index = 0
while index < len(language):
print("while:", language[index])
index = index + 1

# for: Java
# for: Php
# for: Go
# for: Python
# while: Java
# while: Php
# while: Go
# while: Python

2. 函数入门

2.1 定义

Python中,函数定义必须以def关键词开始.

# arg1、arg2代表参数
def func_name(arg1,arg2)
""" 函数说明文档 """
# TODO
return x

2.2 调用

## ---- basis/func_demo.py ---- ##
def getSumList(list_num):
""" 把列表中的所有元素相加 """
sumTotal = 0
for n in list_num:
sumTotal = sumTotal + n
return sumTotal
# -----------------

### 当前main包函数 ###
def sumList(list_num):
""" 把列表中的所有元素相加 """
sumTotal = 0
for n in list_num:
sumTotal = sumTotal + n
return sumTotal


if __name__ == "__main__":
list_var = [10, 20, 30, 40, 50, 60, 70, 80]
# 调用basis包里的函数
print("func_demo.getSumList:", func_demo.getSumList(list_var))
# 调用当前包函数
print("main.sumList:", sumList(list_var))
# 调用内置函数
print("sum:", sum(list_var))
# 打印函数说明
print("getSumList函数说明:", func_demo.getSumList.__doc__)

## 输出
# func_demo.getSumList: 360
# main.sumList: 360
# sum: 360
# getSumList函数说明: 把列表中的所有元素相加

3. 参数分类

3.1 可变&不可变类型

Python语言的数据类型有不可变类型和可变类型两种,因此参数也分可变类型和不可变类型;

  • 不可变类型:数值类型、字节串类型、元组类型;
  • 可变类型:列表类型、字典类型

对不可变类型参数的传递采用:值传递;   对于可变类型参数的传递采用: 地址传递

当使用可变参数类型传递时,要特别注意:函数内对变量的修改,也会影响到函数外的实参。

3.2 区别演示

def argDemo(str, list_var):
""" 演示可变类型和不可变类型作为参数的区分 """
# 修改字符串(不可变类型)
str = "hello"
# 修改列表
list_var[0] = "hello"


if __name__ == "__main__":
name = "张三"
names = ["张三", "李四"]
print("调用函数前: name:{} names:{}".format(name, names))
argDemo(name, names)
print("调用函数后: name:{} names:{}".format(name, names))

# 调用函数前: name:张三 names:['张三', '李四']
# 调用函数后: name:张三 names:['hello', '李四']

4. 参数传递

4.1 默认参数

def defaultArgDemo(name, age=18):
"""
默认参数演示使用
:param name:
:param age:
:return:
"""
res = "姓名:{} 年龄:{}".format(name, age)
return res

if __name__ == "__main__":
print("当不传age时: ", defaultArgDemo("张三"))
print("当传age时: ", defaultArgDemo("李四", 22))

# 当不传age时: 姓名:张三 年龄:18
# 当传age时: 姓名:李四 年龄:22

4.2 关键字参数

一般我们调用函数时,但是按照函数的形参的顺序传递参数(也就是位置参数),除此之外我们还可以通过关键字传参,如下示例:

def funcDemo(name, age, home):
"""
:param name:
:param age:
:param home:
:return:
"""
res = "姓名:{} 年龄:{} 地址:{}".format(name, age, home)
return res


if __name__ == "__main__":
print("关键字参数演示A: ", funcDemo(age=20, name="张三", home="北京"))
print("关键字参数演示B: ", funcDemo(home="南京", name="李四", age=39))

# 关键字参数演示A: 姓名:张三 年龄:20 地址:北京
# 关键字参数演示B: 姓名:李四 年龄:39 地址:南京

@注:关键字参数传参,和顺序没有关系

4.3 变长参数

4.3.1 以一个*开始

def funcDemo(*args):
"""
以* 开始的变长参数
:param args:
:return:
"""
res = "接收结果:{} 类型:{}".format(args, type(args))
return res

if __name__ == "__main__":
# 传字符串、数字
print("变长参数A: ", funcDemo("张三", 10))
# 传字符串、数字、列表
print("变长参数B: ", funcDemo("张三", 10, ["篮球", "游戏"]))

# 变长参数A: 接收结果:('张三', 10) 类型:<class 'tuple'>
# 变长参数B: 接收结果:('张三', 10, ['篮球', '游戏']) 类型:<class 'tuple'>

@注: 以一个*开始的变长参数,接受到数据会变成元组类型,并且在一个函数定义中,最多只能有一个这样的参数。

4.3.2 以两个*开始

def funcDemo(**args):
"""
以 ** 开始的变长参数
:param args:
:return:
"""
res = "接收:{} 类型:{}".format(args, type(args))
return res

if __name__ == "__main__":
print("运行结果A> ", funcDemo(name="张三", home="北京"))
print("运行结果B> ", funcDemo(name="李四", likes=["动漫", "游戏"]))

# 运行结果A> 接收:{'name': '张三', 'home': '北京'} 类型:<class 'dict'>
# 运行结果B> 接收:{'name': '李四', 'likes': ['动漫', '游戏']} 类型:<class 'dict'>

@注: 以两个*开始的变长参数,接受到数据会变成字典类型,并且在一个函数定义中,最多只能有一个这样的参数。

5.匿名函数

Python使用关键字lambda来创建匿名函数,匿名函数主体是一个表达式,而不是一个代码块,所以能实现的业务逻辑非常有限。

if __name__ == "__main__":
# 定义匿名函数
addFunc = lambda a, b: a + b
# 使用
print("3 + 3 = ", addFunc(3, 3))
print("5 + 5 = ", addFunc(5, 5))

# 结合map遍历每个元素,并乘以10
numbers = [1, 2, 3]
res = map(lambda x: x * 10, numbers)
print("res = ", list(res))

# 3 + 3 = 6
# 5 + 5 = 10
# res = [10, 20, 30]