Q:

pythonでpathにファイルを書き込む関数の一般化

以下のような、urlの内容を保存する関数に、pathを引数にとってそこに保存するような機能をつけたいと思っています。
def download(url):
    name = url.split("/")[-1]
    print(name)
    with open(name, "wb") as f:
        f.write(requests.get(url).content)

以下のように書き換えましたが、この機能をこれから先に作る関数にもつけたい場合、どうするのが効率的でしょうか?
同じようなものを何度も書かずに済む方法をお聞きしたいです。
def download(url, path=None):
    ##ここから##
    p = "" 
    if (path != None and os.path.exists(path)):
        p = path
    ##ここまでのことです
    name = url.split("/")[-1]
    with open(p + name, "wb") as f:
        f.write(requests.get(url).content)

デコレータなどを使うのでしょうか?方針がたたないので質問します。
環境はpython3.6.0です。
3/21 14時追記
この関数を他で呼び出したいということではなく、例えば以下のような先程の関数に似た関数を作るときに、pathに関する同じような処理をいちいち書くことを省略したいということです。
def download_new(url, path=None):
    ##ここから##
    p = "" 
    if (path != None and os.path.exists(path)):
        p = path
    ##ここまでのことです
    name = url.split("/")[-1]
    with open(p + name + "_new.jpg", "wb") as f:
        f.write(requests.get(url).content)

A:

デコレータを使う例を以下に示します。
import os
import requests

def download_path(f):
  import functools
  @functools.wraps(f)
  def dlpath(url, path="."):
    if not ( os.path.isdir(path) and
             os.access(path, os.W_OK|os.X_OK) ):
      path = "."
    return f(url, path)
  return dlpath

@download_path
def download(url, path):
  name = url.split("/")[-1]
  ## need to check `name'
  print(name)
  with open(os.path.join(path, name), "wb") as f:
    f.write(requests.get(url).content)

## Save to current directory
## download('http://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv')

## Save to /tmp directory
## download('http://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv', '/tmp')

元のコードを見る限り、保存先のディレクトリが存在しない(or書き込み権限がない)場合にはカレントディレクトリに保存する様なので、その様にしています。また、name = url.split("/")[-1] の部分は、本来であればファイル名として正当かどうか、保存先ディレクトリに同名のファイルが存在するかどうか(同名のファイルが存在する場合、上書きするのかエラーとして処理するのか)などをチェックする必要があるかと思います(上記のコードではチェック処理を端折っています)。

