Python基础篇10-函数

# 函数,提高代码复用
# 函数不写return,默认返回None

# 1、定义函数
def print_hello():
    print("Hello!!")


# 2、函数的调用
print_hello()


# 3、有参函数
def func1(name):
    print("my name is ", name)
func1("小白")


# 4、默认值参数,默认值参数必须在后面no why
def func2(name, age=18):
    print("my name is {}, age is {}".format(name, str(age)))
func2("小白")  # 没有传age,则取默认值,有则使用传的值


# 5、可变参数列表
def func3(*args):
    print(args)  # (1, 2, 3, 4, 5, 6)
func3(1, 2, 3, 4, 5, 6)  # 可传任意长度个参数,内部使用args来获取,操作元组的形式

def func4(name, *args):
    print(name, args)
func4("李四",1,2,3,4,5)


# 6、关键字参数
def func5(**kwargs):
    print(kwargs)  # {'name': '张三', 'age': 20}
func5(name="张三", age=20)  # 指定每个参数对应的key


# 7、函数返回值
def func6(a, b):
    return a + b
print(func6(1, 4))

# 8、函数多个返回值
def func7(a, b):
    return a + b, a * b
add, mult = func7(99, 29)    # 返回的是元组,语法上返回的元组可以省略括号
print(add, mult)
print(type(func7(99, 29)))    # <class 'tuple'>

# 9、舍弃函数的返回值
add, _ = func7(99, 29)    # 相当于返回了两个值,有一个不用


# 10、map()函数接收两个参数,参数1:函数    参数2:Iterable
# map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
def func8(x):
    return x * x
r = map(func8, [1,2,3,4])
for i in r:
    print(i)
print(type(r))  # <class 'map'>
# print(list(r))

print(list(map(func8, [1,2,3,4])))    # 一般这么写


# demo    将列表中数字转成字符串
def toStr(num):
    return str(num)
temp_list0 = [1,2,3,4,5,6]
new_temp_list0 = []
for i in temp_list0:
    new_temp_list0.append(toStr(i))
print(new_temp_list0)
print(list(map(toStr, temp_list0)))    # 使用map完成上述操作


# 11、filter()函数也是接收一个函数和一个序列
# filter把传入的函数依次作用在每个元素,然后根据返回值是True还是False决定保留还是丢弃
def func9(x):
    return x % 2 ==1
n = filter(func9, [1,2,3,4])
print(type(n))    #<class 'filter'>
for i in n:
    print(i)

print(list(filter(func9, [1,2,3,4])))    # 一般这么写


# 12、sorted()排序
temp_list = [1,6,2,5,4,3,8,7]
def func10(x):
    if x == 'Zhang':
        str.upper(x)
print(sorted(temp_list))    # 默认升序
print(sorted(['CCC', 'bb', 'ffff', 'z'] , key = str.lower))    # 将列表中的每个元素变为小写,再按每个元素中的每个字母的ascii码从小到大排序
print(sorted([33,22,-10,-20,9,-1], key = abs, reverse=True)) # 取绝对值,排序,然后反转
# demo
temp_list2 = [{'name':'abc','age':20},{'name':'def','age':30},{'name':'ghi','age':25}]     #列表中的元素为字典
def getAge(s):
    return s['age']
sorted(temp_list2, key = getAge)

# 13、函数作为返回值
def add(a, b):
    def cel():
        return a + b
    return cel    # 函数返回一个函数
print(add(1, 2)())

# 14、匿名函数
func11 = lambda x : x * x
print(func11(10))    # 执行该匿名函数

# 15、列表生成式
'''
    range(start, end, step) 
        1、传一个参数,则生成一个从0开始到传入参数结束的整数列表
        2、传入两个参数时,第一个参数起始位,第二个参数结束位
        3、第三个参数表示递增或递减值,默认为0
'''
# demo1
for i in range(5):    # [0,1,2,3,4]
    print(i)

# demo2    使用场景
import random
red_num = random.sample(range(1,34), 6)    # 从列表中随机选出6个元素

# demo3
new_num = []
for num in red_num:
    temp = str(num).zfill(2)    # 转成字符串,2位,不足左边补0
    new_num.append(temp)
print(new_num)

# 列表生成式写法
new_num2 = [str(num).zfill(2) for num in red_num]
print(new_num2)


# demo4    list会将所有元素都放入到内存
s = [i for i in range(1, 101, 2)]    # 1-100所以奇数
print(s)

# demo5 generator生成器,在循环的时候,根据规则计算下一个元素,然后放到内存
s1 = (i for i in range(1, 101, 2))
print(s1)    # <generator object <genexpr> at 0x10fcbcb10>
for i in s1:
    print(i)

# 三元运算符
a = 5
b = 4
if a > b:
    c = a
else:
    c = b

# 三元表达式
c = a if a > b else b
print(c)
posted @ 2019-08-14 17:55  为你编程  阅读(225)  评论(0)    收藏  举报