python学习笔记-----函数

函数

# 1. 无参数的函数;
# # 定义函数, 并不会执行;

# def hello():
#     # 函数体
#     print("hello")
# # 调用函数
# hello()


# 2. 带有参数的函数
def fun1(name):
    # name = "fentiao"
    # 定义函数时的变量称为形式参数, 变量名可以任意起;
    print("hello %s" %(name))

fun1("fendai")     # 调用函数时的参数称为实参, 该参数必须是实际存在的;


# 函数调用时一般有返回值;没有返回值时, python中默认返回None;
def hello():
    print("hello")


res = hello()
print(res)
return的作用
import random

def get_level(score):
    if 90 < score <= 100:
        return 'A'
    elif 80 < score <= 90:
        return 'B'
    else:
        return 'C'

def main():
    for i in range(20):
        score = random.randint(1,100)
        print("成绩为%s, 等级为%s" %(score,get_level(score)))

main()

返回值有多个
def fun(a):   # a = [34, 1, 2, 3, 4, 5, 6, 7, 2378]
    # 我接收一个列表, 求这个列表的最大值,平均值, 最小值;
    max_num  = max(a)
    min_num = min(a)
    avg_num = sum(a)/len(a)

    # python函数中, 只能返回一个值;
    # 如果非要返回多个值, 会把返回的值封装为一个元组数据类型;
    return max_num, avg_num, min_num


variables  = fun([34, 1, 2, 3, 4, 5, 6, 7, 2378])
print(variables, type(variables))
函数参数

# 形参--必选参数
def add(x, y, z):  # x=1, y=2
    return x + y + z
print(add(2,3,4))


# 形参--默认参数
def mypow(x, y=2):
    return x ** y

print(mypow(2))



# 形参--可变参数
# 可变参数, *变量名;
# *args, args实质是一个元组;
def mySum(*args):
    print(args, type(args))
    return  sum(args)

print(mySum(1,2,3,4,5))

# 如果已经存在;列表, 但是要把列表的每一个元素作为参数, 可以直接*li进行解包;
li = {1,2,3}
print(mySum(*li))




# 形参--关键字参数
# **kwargs关键字参数; 接收的kwargs是字典类型;
def fun(**kwargs):
    print(kwargs, type(kwargs))

fun(a=1, b=2)

# d = {
#      'a':1,
#      'b':2
#      }
#
# fun(**d)  # a=1,b=2

# <div id="s_tab"  width=100px  height=200px>网页</div>

def make_html(label, value, **kwargs):
    s = ""
    for k,v in kwargs.items():
        s += " %s=%s" %(k,v)

    html = "<%s %s>%s</%s>" %(label, s, value, label)
    return html
print(make_html("div", "网页",id="s_tab",width=100, height=200))




#函数练习--平方等式

题目需求:
    对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:
    f(13) = 1**2 + 3**2 = 10
    f(207) = 2**2 + 0**2 + 7**2 = 53

    下面给出三个正整数k,a, b,你需要计算有多少个正整数n满足a<=n<=b,
    且k*f(n)=n

输入:
    第一行包含3个正整数k,a, b, k>=1,  a,b<=10**18, a<=b;
输出:
    输出对应的答案;

范例:
    输入: 51 5000 10000
    输出: 3


def f(n):
    res = 0
    for item in str(n):
        res += int(item) ** 2
    return res

def isOk(k, n):
    if k * f(n) == n:
        return True
    else:
        return False


def main():
    k = 51
    a = 5000
    b = 10000
    count = 0
    for i in range(a, b + 1):
        if isOk(k, i):
            count += 1

    print(count)

main()

函数的作用域
# 作用域:
#   局部作用域:
#   全局作用域

# 全局作用域:作用于整个脚本
num = 10
print("out fun: id=", id(num))

def fun():
    # 局部作用域, 在函数运行时生效, 函数运行结束则释放;
    num = 2
    print("in fun: id=", id(num))
    print("in fun: num = %s" %(num))

fun()
print("out fun: num =%s" %(num))



"""
out fun: id= 505537440
in fun: id= 505537312
in fun: num = 2
out fun: num =10
"""

global关键字
num = 10

def fun():
    # 通过global关键字声明局部变量为全局变量, 让函数执行完, 2依旧生效;
    global num
    num = 2

fun()
print(num)


函数练习–Collatz序列

1.Collatz序列
编写一个名为collatz()的函数,它有一个名为number的参数。
如果参数是偶数,那么collatz()就打印出number//2,并返回
该值。如果number是奇数,collatz()就打印并返回3*number+1。
然后编写一个程序,让用户输入一个整数,并不断对这个数
调用collatz(),直到函数返回值1(令人惊奇的是,这个序列
对于任何整数都有效,利用这个序列,你迟早会得到1!既使数学
家也不能确定为什么。你的程序在研究所谓的“Collatz序列”,
它有时候被称为“最简单的、不可能的数学问题”)。

- 输入:
    3

- 输出:
    10
    5
    16
    8
    4
    2
    1




def collatz(number):
    if number == 1:
        exit(0)
    elif number %2 == 0:
        return number // 2
    else:
        return 3 * number + 1


num = int(input('Num:'))
while True:
    num = collatz(num)
    print(num)

函数参数的顺序

必选,> 默认,> 可变,> 关键字

定义函数,默认参数的默认值尽量不是可变参数
def fun(li=[]):
    li.append("hello")
    return li


print(fun())
print(fun())

结果如下:

['hello']
['hello', 'hello']

猜你喜欢

转载自blog.csdn.net/qq_41891803/article/details/81514103
今日推荐