函数——参数

1.作用:

将重复的代码,封装到函数,只要使用直接找函数。
函数可以增强代码的模块化提高代码的重复利用率

2.定义函数:
  • 格式:
def 函数名([参数,参数...]):
		函数体 (重复的代码)
  • 注意1:
    • 1.必须使用关键字def
    • 2.函数体注意缩进
    • 3.函数名() 绑定
  • 注意2:
    • 函数名命名规则同变量名,要满足标识符命名规则
    • 不能和系统函数重名,否则系统函数无法使用
    • 函数定义分两部分函数头函数体
    • 函数体,就是实现功能的代码段,以:开头,必须缩进
    • 函数名的命名风格:一般建议用下划线分隔小写单词组成:say_hello
3.函数调用
  • 案例:产生10个随机数
import random


def generate_random():
    for i in range(10):
        ran = random.randint(1, 20)
        print(ran)


print(generate_random)  # 打印函数名
# <function generate_random at 0x0000000002071E18>


# 调用: 函数名()   找到函数并执行函数体的内容
print('------------1--')
generate_random()

print('------------2--')
generate_random()
4.带参数的函数(形参 VS 形参)
  • 案例:
    求随机数的函数,产生的个数未知。
'''
定义:
 def 函数名(参数,参数,..):
    函数体
调用:
    pass
'''
def generate_random(number):   # number 是形参
    for i in range(number):
        ran = random.randint(1, 20)
        print(ran)
 
# 调用
generate_random(5)  # 5是 实参
  • 案例: 求加法的函数
def add(a,b):
	result = a + b
	print('和:',result)
add(2,3)   # 和:5
  • 案例
    定义一个登陆函数
    参数:username,password
    函数体:判断参数传过来的username,password是否正确,如果正确则登陆成功,否则打印登陆失败,登录失败次数超过三次,账户被锁定。
def log_in(username, password):
       # 模拟数据库
       user_name = "huahua"
       pass_word = "123456"
       for i in range(3):
              if username == user_name and password == pass_word:
                     print("登陆成功!")
                     break
              else:
                     print("登录失败!")
                     username = input('请输入用户名:')
                     password = input("请输入密码:")
       else:
              print("账户被锁定!")


username = input('请输入用户名:')
password = input("请输入密码:")
log_in(username, password)

-案例:找出列表的最大值,自己封装一个求最大值函数

def max(list):
	max = list[0]
	for i in list:
		if i > max:
			max = i
	print(max)
	
max([1, 5, 9, 7, 6, 3, 4])

tuple1 = (3, 6, 1, 0, 5)
max(tuple1)

print(type(tuple1))  # type()只能查看是什么类型

# 判断是不是什么类型: isinstance(变量,类型关键字)
# print(isinstance(2, int))  # 返回值是 True

print(isinstance(tuple1, tuple))  # 返回值是 True

if isinstance(tuple1, tuple):
    print('不能排序和翻转')
5.可变参数(个数可变)
def add(*args):
	print(args)

add() # 返回空元组()
add(1)  # 返回 (1,)
add(1,2,3) # 返回 (1,2,3)
def add(*args):
    sum = 0
    if len(args) > 0:
        for i in args:
            sum = sum + i
        print("累加和为:", sum)
    else:
        print("没有元素可计算,sum = ", sum)

add()  # 没有元素可计算,sum =  0
add(1)  # 累加和为: 1
add(1, 2, 3) # 累加和为: 6 
# xxx 计算出来的累加和是:xxx

def add(name, *args):  # name, *args ='飞飞', 4, 6, 8
    sum = 0
    if len(args) > 0:
        for i in args:
            sum += i
        print('%s累加和是:sum:%s' % (name, sum))
    else:
        print('没有元素可计算,sum:', sum)


# 调用
add('飞飞', 4, 6, 8)

# a,*b =1,3,5,6,7   ---->a = 1    b = (3,5,6,7)

# 注意: 可变参数必须放在后面: name,*args
6.关键字参数
  • 关键字参数:key = value
def add(a, b = 10):  # 关键字参数,此时b 是默认值
	result = a + b
	print(result)

# 调用
add(5)  # 返回 15
add(4, 7)  # 返回 11   此时b = 7,覆盖原来的默认值
def add1(a, b = 10, c = 4):
    print(a, b, c)
    result = a + b + c
    print(result)


add1(1)

add1(1, 5)  # 是给b赋值成功
add1(2, 6)  # 默认6是赋值给b了,
add1(2, c=6)  # 如果想将6赋值给c,则需要结合关键字的 key 使用

  • 关键字参数为字典时(**kwargs)
def func(**kwargs):  # key word  argument
	print(kwargs)

func(a=1, b=2, c=3)  # {'a': 1, 'b': 2, 'c': 3}

func()  # {}

# 传入值为字典时
dict1 = {'001': 'python', '002': 'java', '003': 'c语言', '004': 'go语言'}
func(**dict1)  
# {'001': 'python', '002': 'java', '003': 'c语言', '004': 'go语言'}

关键字参数
传入字典时

# 函数: 打印每位同学姓名和年龄
students = {'001': ('蔡徐坤', 21), '002': ('王源', 19), '003': ('王俊凯', 20), '004': ('易烊千玺', 19)}


def print_boy(name, **persons):  # persons = students
    print('{}喜欢的小鲜肉是:'.format(name))
    if isinstance(persons, dict):
        values = persons.values()
        # print(values)
        for name, age in values:
            print('{}的年龄是:{}'.format(name, age))


# 调用
print_boy('蕊蕊', **students)
  • 总结
  • aa(**kwargs)— 装包
  • print(**dict)----- 拆包
'''
使用函数的时候:
def aa(**kwargs):
    pass

aa(a=1, b='hello', c='tom')    --->将关键字装包成字典

'''


def aa(**kwargs):
    print(kwargs)


aa(a=1, b='hello', c='tom')  # 装包:{'a': 1, 'b': 'hello', 'c': 'tom'}

# 如果在开发的时候,已知一个字典

dict1 = {'a': 1, 'b': 'hello', 'c': 'tom'}

aa(**dict1)  # a=1, b='hello', c='tom'    拆包的过程


def bb(a, b, *c, **d):
    print(a, b, c, d)


bb(1, 2)  # 1 2 () {}

bb(1, 2, 3, 4)  # 1 2 (3,4) {}

bb(1, 2, x=100, y=200)  # 1 2 () {'x':100,'y':200}

bb(1, 2, 3, x=100)  # 1 2 (3,) {'x':100}

bb(1, 2, x=100, y=200, z=100)

  • 关键字为列表时( *args)
def func(a, *args, **kwargs):
    print(a, args, kwargs)
    
list1 = [2, 5, 8]
dict1 = {'1': 'a', '2': 'b', '3': 'c'}

func(1, *list1, **dict1)
# 1 (2, 5, 8) {'1': 'a', '2': 'b', '3': 'c'}
func(1, list1, **dict1)
# 1 ([2, 5, 8],) {'1': 'a', '2': 'b', '3': 'c'}
总结
'''
无参数函数:

def func():
    pass

func()  ---->调用
  
有参数函数:
  1. 普通参数
  
  def func(name,age):
        pass
  
  func('aa',18)   ----> 形参与实参的个数要一致
  
  
  2. 可变参数:
   A. def func(*args):
          pass
          
      func()  ----> 函数调用时,实参的个数可以没有,也可以多个   *不能是关键字参数
      func(4)  func(5,'h')
  
  
  B. def  func(**kwargs):
         pass
        
     func(a=1,b=2)  ----> 函数调用时,实参的个数可以没有,也可以多个   **必须是关键字参数

  C. def func(*args,**kwargs):
         pass
    
    list1 = [1,3]
    dict1 = {'1':'a','2':'b'}
    func(*list1,**dict1)  # func(1,3,'1'='a','2'='b')
     
  D. 混用
  
  def func(name,*args,**kwargs):
        pass
        
  func('tom')   ----> 必须赋值

  3. 默认值+关键字
  
  def func(name,age=18):
        pass
        
  func('tom')  ----》 tom  18
  
  func('tom',age=20)   --->关键字赋值
  
  

'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值